[英]Js Promise.all not returning properly
我有几个我想通过Promises(loadA,loadB,loadC)并行执行的函数。
Promise.all([
new Promise(loadA),
new Promise(loadB),
new Promise(loadC)
])
.then(checkFunction)
.catch(errorHandler);
功能如下:
function loadA(){
return load("A");
}
在适当的情况下,其中A被B和C取代。 加载函数为:
function load(value) {
return new Promise(function(resolve, reject) {
chrome.storage.sync.get(value, function (result) {
if(!exists(result)){
console.log("tried to fetch " + value + " from sync, could not find");
reject("could not find the user information");
} else {
console.log("fetched " + value + " from sync: " + result.userId);
resolve(result);
}
});
})
}
```
我正在做一些测试,当加载功能发送Promise reject
,出现了问题。 函数“ next-in-in-line”是checkFunction
,不会被调用, errorHandler
函数也不会。 我已经确认load
承诺实际上已被拒绝,因为控制台显示了3条“试图获取...”语句。
我也不明白为什么我看到3 tried to fetch..
语句,因为Promise.all的规范指出一旦承诺之一被拒绝或在所有承诺都解决之后它将返回(来源: http:// mzl.la/1jLTOHB )。 我观察到的行为与以上两种情况都不匹配,我可能做错了什么?
既然您的加载函数已经创建并返回了一个Promise,对我来说,就像您只想要这样:
Promise.all([
loadA(),
loadB(),
loadC()
])
.then(checkFunction)
.catch(errorHandler);
在构造代码的方式中,您将启动三个并行运行的操作,以加载“ A”,“ B”和“ C”。 这三个操作独立运行,因此为什么您会看到三个“试图获取...”消息(每个操作内部一个)。 只有在这三个独立的操作之外, Promise.all()
才会查看解析/拒绝状态并决定下一步要做什么。
而且,实际上,您可以简化为:
Promise.all([
load("A"),
load("B"),
load("C")
])
.then(checkFunction)
.catch(errorHandler);
你的方式了吧,你创造从未得到解决或拒绝这样的外部承诺.then()
或.catch()
从来没有发射。 只是,您的load()
函数内部的内部允诺得到了解决或拒绝。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.