如何获取对promise的延迟对象的引用?

时间:2016-02-17 19:38:03

标签: javascript promise q

如果我有一个承诺的引用,我怎样才能获得对它的延迟对象的引用,以便我可以使用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;

1 个答案:

答案 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;
});

这种复杂性和尴尬是现在不推荐通知的原因之一。