如何从$ q.all链接承诺获得.notify()?

时间:2016-10-24 07:04:00

标签: angularjs angular-promise

我在使用$q service的角度js中使用链式承诺,除了 progressCallback 的信息之外它还能正常工作吗?让我画出我到目前为止所做的事情?

以下面的可链接承诺方式从我的控制器调用函数

fun1()
.then(resp1){
    return fun2(resp1.id);
})
.then(resp2){
    return $q.all([fun3(resp2.id),fun4(resp2.name)]);
})
.then(function(resp34){
    return fun5();
})
.then(success)
.catch(errorhandler)
.finally(final);

这是我服务中的所有功能签名

var funX = function(param) {
    var d = $q.defer();
    d.notify('start with funX'); // Note: it was not working so placed inside else
    doSomethingASync(param, function(err,data) {
        if(err) { d.reject(err);}
        else { d.notify('done with funX'); d.resolve(data); }
    });
    return d.promise;
});

现在我的问题是我在哪里收到控制器中的d.notify()消息?

试用1

.then(resp1, info1){
    return fun2(resp1.id);
});

但它未定义

试用2

.then(resp1, err1, info1) {
    return fun2(resp1.id);
}

但仍未定义?

更新

通过在finally()

中添加第二个参数,我找到了一种方法
 .then().catch().finally(final, notify);

这是我的函数定义。

        var errorHandler = function(err) {
           console.error('Error returned from function:', err);
        };

        var final = function() {
            console.log('Called Finally');
        };

        var notify = function(notification) {
            console.log('Notify', notification);
        };

        var success = function(data) {
            console.log('Success data');
            console.log(data);
        };

我们可以获得每个承诺函数通知,或者这是不可行的吗?

但现在我的查询已更改为

我们如何为.notify添加$q.all()

据我了解$ q.all返回一个包含所有promise promise数据的promise;

0 个答案:

没有答案