javascript - 如果我等待 2 个函数,我可以保证返回对象将具有两个值

标签 javascript async-await

我有以下代码

module.exports = async function (req, res) {
 const station1 = await getStation('one')
 const station2 = await getStation('two')

 return { stations: [station1, station2] }
}

我能保证当发送最终返回值时它肯定有 station1station2 数据吗,还是我需要包装函数调用在 Promise.all()

最佳答案

如您所见,可以保证 return 语句仅在两个 getStation() promise 已解决时才会执行。

但是,对 getStation 的第二次调用只会在第一个 promise 已解决时发生,从而使它们连续运行。由于它们之间没有依赖关系,如果您并行运行它们,您可以获得性能提升。

虽然这可以通过 Promise.all 实现,但您可以通过首先检索两个 promise 然后才对它们执行 await 来实现相同的目的:

module.exports = async function (req, res) {
    const promise1 = getStation('one');
    const promise2 = getStation('two');
    return { stations: [await promise1, await promise2] }
}

现在这两个调用将在“同一”时间执行,并且只有 return 语句将等待两个 promise 解析。 MDN's "simple example" 中也说明了这一点.

关于javascript - 如果我等待 2 个函数,我可以保证返回对象将具有两个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43041384/

相关文章:

javascript - 将 arraybuffer 从 angularjs 发送到 C# 端点

javascript - 如何阻止链接更改页面上的位置(保持向后滚动位置)

php显示pdf的内容

c# - 我是否需要将 Azure 函数作为异步方法运行?

javascript - HTML5 GAME 的滚动板应该使用 SVG 或 Canvas

javascript - 我无法使用 Gatsby 动态创建页面

c# - 将异步方法作为 Quartz.NET 作业运行并处理对象问题

c# - ASP.NET MVC 中异步编程的最佳实践是什么?

javascript - 嵌套异步/等待javascript

javascript - 等待深度函数调用的深度异步等待结果?