gpt4 book ai didi

javascript - 延迟 promise 值未更新/解析/延迟

转载 作者:行者123 更新时间:2023-11-28 13:16:43 29 4
gpt4 key购买 nike

我有一个 Controller 函数来创建一些东西。调用该函数时,将运行 setInterval 来获取项目的状态。

这是服务:

(function () {
'use strict';

function myService($q) {
let deferred = $q.defer();

function createSomething(name) {
Meteor.call('createSomething', name, (err, res) {
if (err) {
deferred.reject(err);
} else {
//value returned is the created item (id, name, status)
deferred.resolve(res);
}
});

return deferred.promise;
}

function getStatus(id) {
Meteor.call('getStatus', id, (err, res) {
if (err) {
deferred.reject(err);
} else {
//statuses are queued, processing, created
deferred.resolve(res);
}
});

return deferred.promise;
}

return {
createSomething: createSomething,
getStatus: getStatus
}
}

angular.module('myApp').factory('myService', myService);
})();

这是 Controller :

(function () {
'use strict';

function myController($scope, myService) {
let ctrl = this;

ctrl.create = (name) => {
myService.createSomething(name)
.then((item) => {
ctrl.statusInterval = setInterval(() => {
myService.getStatus(item.data.id)
.then((status) => {
//status is always 'queued' :(
if (status.data.status === 'created') {
clearInterval(ctrl.statusInterval);
//do something
}
});
}, 5000);
});
};
}

angular.module('myApp').controller('myController', myController);
})();

当我检查服务getStatusresponse的值时,每次调用时状态都会发生变化(队列 ->处理...处理->创建)。但是, Controller 中的status值始终为queue

如何获得要解析的 promise 值?

最佳答案

createSomething()getStatus() 需要创建并返回自己的 Promise。他们无法在所有情况下共享 promise 并正常工作。

此外,它们应该在每次调用时创建并返回一个唯一的 Promise,而不是每次调用时都返回相同的 Promise。请记住,Promise 是单向状态机。一旦解决或拒绝,即使再次调用 resolve()reject(),它们的状态也不会改变。

这是一个例子:

    function createSomething(name) {
// create a unique deferred inside this function each time you call it
let deferred = $q.defer();
Meteor.call('createSomething', name, (err, res) {
if (err) {
deferred.reject(err);
} else {
//value returned is the created item (id, name, status)
deferred.resolve(res);
}
});

return deferred.promise;
}

关于javascript - 延迟 promise 值未更新/解析/延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37290403/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com