【发布时间】:2016-10-25 11:57:28
【问题描述】:
我有两个异步操作需要不同的时间来执行,比如说
1 .一个操作需要 1 秒执行
2.其他操作 10 秒执行
我想使用promise.all,这两个操作将并行执行(我知道在js中没有多线程的概念......) 并且都在同一个踏板上执行, 当我使用 promise all 时,我 预计 op1 将在 op2 之前完成 这不会发生......知道我在这里错过了什么吗? (可以说 op1 在我的服务器(1 秒) op2(10 秒)中保存一些小东西,当我在 1 秒后检查时,我没有看到 op1 在两个都完成后完成......)。 我知道承诺都将在两者都完成(解决)后完成。
Promise.all([op1, op2]).then(values => {
console.log(values);
}, reason => {
console.log(reason)
});
【问题讨论】:
-
你怎么知道 op1 在 op2 之前完成了?你能提供
op1和op2的代码吗? Promise.all() 在数组中的 all 承诺(例如op1和op2)完成(解决/拒绝)之前不会解决。只有在两者都完成后,Promise.all() 才会解析并执行您在.then()中的代码 -
"没有发生" - 请出示您的实际代码并告诉我们什么没有发生
-
"当我在 1 秒后检查时,我没有看到 op1 完成" - 如果您想等待该操作,则不应在超时后“检查”然后使用
op1.then(…)。 -
"我想用promise.all 两个操作会并行执行" 注意使用
Promise.all跟操作是否有没有关系是并行执行的。它所做的只是给你一个承诺,当任一操作失败或两个操作都成功时,该承诺将被履行。 -
@JennyM 是的。无论是在
op1().then(…)或Promise.all([op1(), …])上下文或其他地方使用,op1()的工作方式都相同。
标签: javascript asynchronous promise bluebird