gpt4 book ai didi

javascript - 获取异步执行的多个 promise 的状态

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:16:47 25 4
gpt4 key购买 nike

我正在并行(异步)执行多个 $http 调用。我的代码逻辑看起来像这样 -

$scope.ids = [1, 2, 3, 4];
var promises = [];
for(var i in $scope.ids){
promises.push(
$http.get('http://0.0.0.0/t2/' + $scope.ids[i])
);
}

$q.all(promises).then(
function(res){
console.log(res);
},
function(res){
console.log(res);
}
);

现在 $q.all() 文档是这么说的

Returns a single promise that will be resolved with an array/hash of values, each value corresponding to the promise at the same index/key in the promises array/hash. If any of the promises is resolved with a rejection, this resulting promise will be rejected with the same rejection value.

现在,当所有 promise 都通过时,我得到一个包含 4 个元素的数组的预期响应。

成功 -> 对象[4]

但是,在所有失败的情况下,res 输出仅显示失败的那个。

失败 -> 哈希

这是预期的,也是 Angular 文档提到的。

在我的例子中,我想知道我发出的所有 http 请求的状态,即使是失败我也需要结果。当然 $q.all() 会在其中一个 promise 失败的那一刻爆发。我想等到所有的 promise 都通过或失败,然后得到结果。我该怎么做?

最佳答案

一个想法是利用 promise 的错误回调来返回有意义的状态:

function Failure(r) {
this.response = r;
}

$scope.ids = [1, 2, 3, 4];
var promises = [];
for(var i in $scope.ids){
promises.push(
$http.get('http://0.0.0.0/t2/' + $scope.ids[i]).then(
function(r) {
return r;
},
function failure(r) {
// this will resolve the promise successfully (so that $q.all
// can continue), wrapping the response in an object that signals
// the fact that there was an error
return new Failure(r);
}
);
);
}

现在 $q.all() 总是会成功,返回结果数组。使用 result[i] instanceof Failure 检查每个结果。如果此条件为真,则该请求失败 - 获取执行 result[i].response 的响应。 IT 可能需要进行一些调整,但希望您明白这一点。

关于javascript - 获取异步执行的多个 promise 的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27616280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com