【发布时间】:2018-03-24 09:52:10
【问题描述】:
我想了解在哪里等待异步操作是否有正确答案。如果这是一个有深度的主题,我也很乐意收到文章或编程术语来阅读。
假设我们有一个缓慢的异步操作,可能正在读取一个大文件:
const resolver = (x) => {
return new Promise(resolve => {
setTimeout(() => {resolve(x)}, 500)
})
}
我可以看到resolver的两种使用方式:
const one = async () => {
const result = await resolver('foo')
console.log(result)
}
const two = async () => {
const result = resolver('foo')
console.log(await result)
}
(注意不同位置的await关键字)
在one 中,我们立即等待,这就是我接触到的模式。我认为这是正常和预期的模式?
但是那条线真的应该等待结果吗?它真的不需要解决,对吧? result 只是在下一行才真正被消耗掉.. 那么为什么不在那里等一下呢,就像 two 说明的那样?
对于这个微不足道的例子,显然没有明确的收获,但在一个具有多个等待和多个异步结果消费者的更大函数中,我可能会看到将await 放在实际需要的地方会更清楚,而不是因为后面的代码需要而预先等待。
有正确的答案吗?还是想法?如果这完全是浪费担心,那么我也很高兴知道这一点:)
【问题讨论】:
标签: javascript node.js asynchronous io