如果我有一个承诺的引用,我怎样才能获得对它的延迟对象的引用,以便我可以使用deferred.notify ..?
var promise = api.get('/some/url').then(function(response){
var items = [];
_.each(response.data, function(item){
// more code to process item
// how do I get a reference to deferred so I can do a...
// deferred.notify('processing ' + item.name);
});
return items;
});
return promise;
答案 0 :(得分:1)
如果我引用了一个承诺,我怎样才能引用它的延迟对象?
你做不到。承诺是消费者方面,可能只会被观察到。延迟仅适用于可以触发通知的制作人。
你可以做的是
return api.get('/some/url').then(function(response){
var items = [];
var def = Q.defer();
_.each(response.data, function(item) {
// do this asynchronously (or there won't be any subscribers yet):
def.notify('processing ' + item.name);
});
def.resolve(items);
return def.promise;
});
这种复杂性和尴尬是现在不推荐通知的原因之一。