javascript - 这些异步/等待代码之间有区别吗?

标签 javascript node.js async-await

我正在阅读有关 async/await 用法和最佳实践的文章,有人在评论中建议这段代码:

const makeRequest = async () => {
    const value1 = await promise1()
    const value2 = await promise2()

    return promise3(value1, value2)
}

可以这样写:

const makeRequest = async () => {
    const value1 = promise1()
    const value2 = promise2()

    return promise3(await value1, await value2)
}

这些是一样的吗?如果不是,那有什么区别?

最佳答案

它们是不同的。最大的区别是第一个示例必须等待 promise1 完成,然后才能尝试 promise2。

在第一个示例中,流程如下所示:

  1. 调用 promise1

  2. 等待promise1完成并存入value1

  3. 调用 promise2

  4. 等待promise2完成并存入value2

在第二个示例中,流程如下所示:

  1. 调用 promise1

  2. 调用 promise2

  3. 等待 promise1 和 promise2 完成

在第二个示例中,可以同时调用 promise1 和 promise2,这样 promise2 就不必等待 promise1 完成。

这可能看起来的另一种方式是使用 Promise.all

例如:

const makeRequest = async () => {
    const [value1, value2] = await Promise.all([promise1(), promise2()])
    return promise3(value1, value2)
}

Promise.all 将启动两个 promise 并等待它们全部完成后再返回:Promise.all docs

promise 值然后按照 promise 在 promise 数组中的顺序放入数组中。使用destructuring ,我们可以从内联值数组中取回这些值。

关于javascript - 这些异步/等待代码之间有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58331663/

相关文章:

javascript - 如何隐藏背景 HDR 贴图的显示,但保存 hdri 在 Three.js 中对光照所做的工作?

javascript - li :hover 的简单 IE7 修复

node.js - Gulp 安装在项目根目录之外

node.js - ECONNRESET 后重新连接到套接字的正确方法(Nodejs net.Socket)

javascript - 如何准备数据字符串但字符串不以null结尾

javascript - 如何获取几个按钮的一个值? "Uncaught TypeError: Cannot read property"

node.js - 如何根据 Loopback 中的标签数组过滤订阅者

python - 连接redis时异步代码失败

c# - 如何将适度大量的数据传递到我的 Web API 应用程序?

javascript - 异步/等待在 reactjs 中不起作用(使用 npx create-react-app)