【发布时间】:2016-05-18 13:03:34
【问题描述】:
我有一个控制器函数可以创建一些东西。调用该函数时,会运行 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都在尝试解决相同的延迟问题?
标签: javascript angularjs meteor promise