【发布时间】:2018-05-11 01:42:20
【问题描述】:
我已经阅读了很多关于 Promise 和 async/await 的文章。他们似乎都在处理返回承诺的 API 以及如何使用这些承诺。我还是有点迷茫。
假设我有一个包含三 (3) 个循环的函数。假设,每个循环执行一些需要五 (5) 秒才能完成的工作,将每次迭代的结果推送到该循环的数组中。这项工作是同步进行的(循环 1 运行,然后是循环 2,然后是循环 3)。
然后,该函数在返回之前对所有三个循环的结果执行一些操作。假设的总执行时间约为十六 (16) 秒。
如果将循环放入它们自己的函数中,包装在一个 promise 中,然后使用 await Promise.all 在 async function 中等待(在对结果进行处理之前),它们是否会并行执行(因为它们在事件循环,而不是调用堆栈),一旦所有三 (3) 个承诺都解决了,函数会继续吗?这比整个过程同步更快吗?
我想我对您何时/为什么要从同步 JS 创建自己的 Promise 感到困惑?
function loop1() {
return new Promise((resolve, reject) => {
let loop1Counter = 0
const loop1Array = []
while (loop1Counter < 10 **8) {
// Do some work
loop1Array.push(resultOfWork)
}
loop1Counter += 1
resolve(loop1Array)
}
}
async function test() {
const promisesToAwait = [loop1(), loop2(), loop3()]
const results = await Promise.all(promisesToAwait)
// Do some work with results
return something
}
【问题讨论】:
标签: javascript