返回一个承诺而不是用angular的$ q.then()解析它

时间:2015-10-16 16:53:43

标签: javascript angularjs

假设您有以下代码:

var callNo1 = $http(...).then(function (response1) {
    var callNo2 = $http(...).then(function (response2) {
        return [response1.data, response2.data];
    });

    return callNo2;
}).then(function (result) {
   console.log(result);
});

由于callNo2是一个承诺,因此[response1.data, response2.data]的数组将记录到控制台。我想要实现的是获得callNo2承诺的引用。所以我的问题是:有没有办法通过return语句获取对内部promise的引用,以便可以通过then参数访问它。

P.S。

以下方式将被视为作弊:

var callNo1 = $http(...).then(function (response1) {
    var callNo2 = $http(...).then(function (response2) {
        return [response1.data, response2.data];
    });

    return { callNo2: callNo2 };
}).then(function (result) {
   console.log(['Do whatever required with result.callNo2', result.callNo2]);
});

1 个答案:

答案 0 :(得分:1)

为此使用回调函数。看:

function call1(callback){
    return $http(...).then(function (response1) {
        var callNo2 = $http(...).then(function (response2) {
            callback(response1.data, response2.data);
        });
    });
}

function calling(){
    call1(function(data1, data2){
        console.log(data1, data2);
    })
}

在call1的函数中,运行call2并返回promisse。当call2完成时,调用callback。