并行解决承诺
Posted
技术标签:
【中文标题】并行解决承诺【英文标题】:Parallel resolution of promises 【发布时间】:2020-02-17 06:05:27 【问题描述】:如果我有一些要并行解决的承诺。我可以使用 Promise.all() 解决它们。但是,如果这些 Promise 内部也有需要解决的 Promise 怎么办?它们会自动解决还是我必须在 Promise.all() 之前手动解决它们?
另外,解决承诺的首选方法是什么? 1. 收集它们然后使用 Promise.all() 2. 创建 Promise 并等待它们自行解决?
【问题讨论】:
不看代码很难说 "我可以使用 Promise.all() 解决它们" - 不,Promise.all
不能解决任何问题,promise 需要自己解决。 Promise.all
只创建一个新的承诺,它将等待所有的输入。
我猜你对多线程环境感到困惑。 js 中只有一个单线程事件循环,所以并行性很难,除非你使用 process.fork()
只要你解决了每个promise中的嵌套promise,一切都很好。
【参考方案1】:
您可能需要单独解析父级中的每个承诺,以确保 Promise.all 能够很好地捕获它。
例如,
const nestedAsyncChild = new Promise(resolve => resolve(someMethod));
const asyncChild = new Promise(resolve => resolve(nestedAsyncChild));
const parent1 = new Promise(resolve => resolve(asyncChild));
const parent2 = new Promise(resolve => resolve(asyncChild));
const parent3 = new Promise(resolve => resolve(asyncChild));
Promise.all([parent1, parent2, parent3])
.then(a =>
console.log("Success");
)
.catch(() =>
console.error("Error");
);
更新
如果有人对某个答案投了反对票,他们应该有共同的礼貌来告诉这个人为什么这样做。把人赶出答题板没有帮助!
【讨论】:
以上是关于并行解决承诺的主要内容,如果未能解决你的问题,请参考以下文章