繁体   English   中英

Js Promise.all没有正确返回

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM