是 async/await 允许其他任务运行

Chr*_*sna 3 javascript asynchronous node.js promise

大家好,我希望你们做得很好,对这个愚蠢的问题感到抱歉,我只是想知道 async/await 是否允许其他任务运行?

我刚刚在 MDN 上读到async wait 的缺点,其中有一部分说“它确实允许其他任务同时继续运行,但你自己的代码被阻止”。这是什么意思?是只有 async/await 才能允许其他任务运行,还是 Promise 也可以这样做?如果是这样,你们能给我举个例子吗?先感谢您 :)

Que*_*tin 7

当函数命中语句时await,它会运行右侧的代码以获取 Promise,然后进入睡眠状态。

\n

其他函数可以同时运行,但在承诺解决之前,此函数中的任何其他行都不会运行。

\n

这不是一个缺点。这才是重点

\n
async function example() {\n    const result = await somethingFromAPromise();\n    do_something_with(result);\n}\n
Run Code Online (Sandbox Code Playgroud)\n

如果它不停止,那么您将无法result在下一行执行任何操作。

\n
\n

文档的这一部分以非常冗长的方式说的是,有时您会遇到这样的情况:

\n
async function example() {\n    const result1 = await somethingFromAPromise();\n    const result2 = await somethingFromAnotherPromise();\n    do_something_with(resul1, result2);\n}\n
Run Code Online (Sandbox Code Playgroud)\n

\xe2\x80\xa6 其中您有两个可以并行运行的承诺,因为它们是完全独立的,但在第一个承诺完成之前您不会启动第二个承诺。

\n

它还告诉您如何减轻这种情况

\n
async function example() {\n    const result1Promise = somethingFromAPromise();\n    const result2Promise = somethingFromAnotherPromise();\n    const [result1, result2] = await Promise.all(result1Promise, result2Promise);\n    do_something_with(resul1, result2);\n}\n
Run Code Online (Sandbox Code Playgroud)\n