gpt4 book ai didi

javascript - 当某些 promise 失败时如何继续 $q.all()

转载 作者:搜寻专家 更新时间:2023-11-01 04:56:26 25 4
gpt4 key购买 nike

我有一组 promise ,每个 promise 调用 http.get()

var items = ["URL1", "URL2", "URL3"];
var promises = [];
//on each URL in items array, I want to create a promise and call http.get
items.forEach(function(el){
return promises.push($http.get(el));
});
var all = $q.all(promises);
all.then(function success(data){
console.log(data);
}).catch(function(reason){
console.log("reason is", reason);
});

我的情况发生了什么

URL2.get 没有得到解析,它立即触发了 $q.all 中的 catch()。由于此失败,all.then() 永远不会被调用。

我想要什么

即使其中一个 promise 被拒绝,我也希望所有 promise 继续执行。

我找到了一个类似的 post但解决方案建议使用另一个名为 Kris Kowal's Q 的 Angular 包。所以我想知道如何在不使用外部包的情况下实现它?

最佳答案

一个简单的 hack 可能是向返回 null 的 promise 添加一个 catch block ,并从 promise.all 结果中过滤 null 结果,例如:

let items = ["URL1", "URL2", "URL3"]
, promises = items.map(url => $http.get(url).catch(e => null))
, all = $q.all(promises).then(data => data.filter(d => !!d))

all.then(data => {
// do something with data
}).catch(e => {
// some error action
})

ES5 中的相同内容:

var  items = ["URL1", "URL2", "URL3"]
, promises = items.map(function(url){
return $http.get(url).catch(function(e){return null})
})
, all = $q.all(promises).then(function(data){
return data.filter(function(d){return !!d}) // filter out empty, null results
})

all.then(function(data){
// do something with data
}).catch(function(e){
// some error action
})

关于javascript - 当某些 promise 失败时如何继续 $q.all(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37247217/

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