Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在哪里放置等待?_Javascript_Node.js_Asynchronous_Io - Fatal编程技术网

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
完成