编程语言
首页 > 编程语言> > javascript-Angular fire 2异步调用一次,但直到第一个完成才处理第二个回调

javascript-Angular fire 2异步调用一次,但直到第一个完成才处理第二个回调

作者:互联网

我正在使用Angular的$q服务发出异步请求.我有2个这样的请求(假设我有一个名为MyService的角度服务来处理这些请求):

MyService.Call1().then(function() {
    //do all the first callback's processing here without waiting for call 2
});

MyService.Call2().then(function() {
    //wait for results of first callback before executing this
});

我不能保证第二个调用将在第一个调用之后完成,但是我需要调用1的结果才能在调用2中进行处理.我知道我可以将promise链接在一起,这意味着调用2等待调用1到在提出要求之前先完成操作,但由于要具备执行操作所需的所有数据,因此我想同时触发两个请求.最好的方法是什么?

编辑:我可以立即使用第一个电话的结果.他们推动了我页面上的一些图表.我不希望第一个电话等待第二个电话进行处理.我认为这可以排除$q.all()之类的机制

解决方法:

使用$q.all的另一种方法是在处理程序中使用第二个承诺.例如

var p1 = MyService.Call1().then(function(data) {
    return processedData;
});

MyService.Call2().then(function(call2Data) {
    return p1.then(function(call1Data) {
        // now you have both sets of data
    });
});

为了解决一些评论,这里介绍了如何处理错误/ promise拒绝而不必等待两个promise都解决或创建多个catch处理程序的方法…

var p2 = MyService.Call2().then(function(call2Data) {
    return p1.then(function(call1Data) {
        // now you have both sets of data
    });
});

// use `$q.all` only to handle errors
$q.all([p1, p2]).catch(function(rejection) {
    // handle the error here
});

标签:angularjs,asynchronous,promise,simultaneous,javascript
来源: https://codeday.me/bug/20191028/1951440.html