Javascript 在哪里放置等待?
我想知道在哪里等待异步操作是否有正确的答案。如果这是一个有深度的话题,我也很高兴收到文章或编程术语来阅读 假设我们有一个缓慢的异步操作,可能正在读取一个大文件:Javascript 在哪里放置等待?,javascript,node.js,asynchronous,io,Javascript,Node.js,Asynchronous,Io,我想知道在哪里等待异步操作是否有正确的答案。如果这是一个有深度的话题,我也很高兴收到文章或编程术语来阅读 假设我们有一个缓慢的异步操作,可能正在读取一个大文件: const resolver = (x) => { return new Promise(resolve => { setTimeout(() => {resolve(x)}, 500) }) } 我可以看到两种使用解析器的方法: const one = async () => { cons
const resolver = (x) => {
return new Promise(resolve => {
setTimeout(() => {resolve(x)}, 500)
})
}
我可以看到两种使用解析器的方法:
const one = async () => {
const result = await resolver('foo')
console.log(result)
}
const two = async () => {
const result = resolver('foo')
console.log(await result)
}
(注意不同位置的wait
关键字)
在one
中,我们立即等待,这就是我所接触到的模式。我认为这是正常的和预期的模式
但这条线真的应该等待结果吗?它确实不需要解决,对吗<代码>结果
仅在下一行中使用。。那么,为什么不在那里等待,正如two
所示
对于这个简单的例子,显然没有什么好处,但是在一个具有多个等待和异步结果的多个使用者的更大函数中,我可以看到将await
放在实际需要的位置会更清楚,而不是仅仅因为后面的代码需要它而预先等待
有正确的答案吗?还是思想?如果这都是担心的巨大浪费,那么我也很高兴得知:)你完全正确。在更大的代码片段中,您将等待事件放在哪里 以下是两种风格如何导致完全不同解释的示例:
// Example 1 - serial async operations
async function () {
var a = await foo();
var b = await bar();
console.log(a+b);
}
假设foo
和bar
返回结果都需要1秒,则执行上述代码大约需要2秒
// Example 2 - parallel async operations
async function () {
var a = foo();
var b = bar();
var aa = await a;
var bb = await b;
console.log(aa+bb);
}
按照与第一个示例相同的假设,执行上述代码大约需要1秒,因为bar
将并行执行,而无需等待foo
完成