我有以下代码
module.exports = async function (req, res) {
const station1 = await getStation('one')
const station2 = await getStation('two')
return { stations: [station1, station2] }
}
我能保证当发送最终返回值时它肯定有 station1
和 station2
数据吗,还是我需要包装函数调用在 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/