私は何かを作成するコントローラ機能を持っています。関数が呼び出されると、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'が延期同じことを解決しようとしている両方の? – Bergi