我怎样才能获得对承诺的延迟对象的引用?

How can I get a reference to a promise's deferred object?

如果我有对 promise 的引用,我如何才能获得对它的延迟对象的引用,以便我可以使用 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;

If I have a reference to a promise, how can I get a reference to it's deferred object?

你不能。承诺是消费方,可能只是被遵守。 deferred 仅供生产者使用,生产者可以触发通知。

你可以做的是

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

这样做的复杂性和笨拙是通知现在被弃用的原因之一。