7 javascript asynchronous async-await
我一直在研究 Promise、await 和 async 函数。当我刚刚处于学习承诺的阶段时,我偶然发现了这一点:
async function async1(){
console.log('Async 1');
await async2(); // *
console.log('AFter Async 1');
}
async function async2(){
console.log('FROM async 2');
}
async1();
console.log('Synchronous'); //**
Run Code Online (Sandbox Code Playgroud)
结果是:
Async 1
FROM async 2
Synchronous
AFter Async 1
Run Code Online (Sandbox Code Playgroud)
代码是如何从*跳转到**的。这里如何使用微任务?
T.J*_*der 16
尽管微任务在该序列期间排队(然后运行),但您询问*
的特定序列(从到)的执行不涉及微任务。**
函数async
是同步的,直到出现第一个await
未捕获的异常,或者return
(包括代码执行“脱离”函数末尾的隐式返回)。此时,该函数返回一个 Promise,并且从调用该函数的位置继续同步执行。如果它是异常或return
隐式返回(不是await
),则微任务将排队以解决函数的承诺(在异常时拒绝它或在返回时履行它)。
我用黄色突出显示了该代码的同步部分:
\n\nasync1
在您的示例中,当您在底部调用时,其同步部分运行(记录Async 1
然后调用,在其同步部分期间async2
记录);运行并得到它的承诺后,到达并返回它自己的承诺;然后同步执行从调用它之后继续,logging 。FROM async 2
async2
async1
await
Synchronous
在这个特定的示例中,在*
和部分之间,用于履行 \ 承诺**
的微任务排队。async2
当示例中执行同步代码的任务完成时,将从微任务队列中选取该微任务并执行\xc2\xa0\xe2\x80\x94,并解决等待它的承诺async1
;async1
\ 的代码继续,执行其日志,然后隐式返回,因此微任务排队以处理该结算(在本例中为履行),并在微任务async2
执行完成后从微任务队列中获取。但没有什么等待这一承诺,因此和解协议没有产生任何明显的效果。
归档时间: |
|
查看次数: |
5085 次 |
最近记录: |