延期承诺值未更新/解析/延期
deferred promise value not updating/resolving/deferring
我有一个控制器函数,它可以创建一些东西。当调用该函数时,会运行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);
})();
这是控制器:
(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);
})();
当我在服务的getStatus
中检查response
的值时,每次调用它时,状态都会发生变化(队列->处理…处理->创建)。然而,控制器中status
的值始终为queue
。
如何解决承诺值?
createSomething()
和getStatus()
需要创建并返回自己的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;
}
相关文章:
- Dojo不解析自定义小部件的模板html中的小部件声明性
- 使用JQuery解析JSON嵌套数组
- 可以简化嵌套的延迟Q Promises解析吗
- 我的模板未被解析
- 如何在Javascript中解析AJAX数组的特定部分
- 主干集合重置和解析
- 解析javascript表单验证器
- 可以't使用Angular解析/检索JSON
- 如何使用Node.js最有效地解析网页
- 当json解析空响应时,Whatwg-Fetch失败,我该如何防止它
- 可以't使用Appcelerator将JSON文件解析为JavaScript中的TableView
- 解析JSON并从中删除对象会出错
- jquery创建的数据-*有时无法解析
- 延期承诺值未更新/解析/延期
- [Vue warn]:未能解析组件
- 在解析对象.save()中;没有返回任何原因
- 测试角度解析方法
- 对象未在Javascript中进行字符串化和解析
- AngularJS加载JSON数据,然后从中解析/加载HTML
- 如何通过解析类信息来使用jQuery创建类