是异步/等待允许其他任务运行

时间:2020-10-24 09:19:04

标签: javascript node.js asynchronous promise

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

我刚刚阅读了MDN上的downside of async await,其中有一部分说“它的确允许其他任务同时继续运行,但是您自己的代码被阻止了”。那是什么意思?并且只有异步/等待才能允许其他任务运行还是诺言也可以做到?如果可以,请给我一些例子吗?预先谢谢你:)

1 个答案:

答案 0 :(得分:3)

当函数点击await语句时,它将在右侧运行代码以获取承诺,然后进入睡眠状态。

其他功能可以在此同时运行,但是直到承诺解决为止,此功能中的任何其他行都将无法运行。

这不是缺点。这就是要点

async function example() {
    const result = await somethingFromAPromise();
    do_something_with(result);
}

如果它没有停止,那么您将没有result下一行要做的事情。


该文档部分在很长的一段话中说的是,有时您会遇到如下情况:

async function example() {
    const result1 = await somethingFromAPromise();
    const result2 = await somethingFromAnotherPromise();
    do_something_with(resul1, result2);
}

...,您有两个保证可以并行运行,因为它们是完全独立的,但是您要等到第一个完成时才开始第二个保证。

它还告诉您如何缓解这种情况

async function example() {
    const result1Promise = somethingFromAPromise();
    const result2Promise = somethingFromAnotherPromise();
    const [result1, result2] = await Promise.all(result1Promise, result2Promise);
    do_something_with(resul1, result2);
}