当在node.js函数中使用async / await时,它是否会阻塞node.js线程,直到它执行下一行代码?
await 后面可以跟任何的JS 表达式。虽然说 await 可以等很多类型的东西,但是它最主要的意图是用来等待 Promise 对象的状态被 resolved。
如果await后面是 promise对象会造成异步函数停止执行并且等待 promise 的解决, 如果await后面是
正常的表达式则立即执行。
1、async或await不会阻止整个解释器,node.js仍然将所有JavaScript作为单线程运行,即使某些代码再async或await上等待,其他事件仍然可以继续运行其事件处理程序(node.js不会被阻止)。
2、 事件队列仍在为其他事件提供服务,是一个事件,解决了一个允许
从逻辑上讲,您可以考虑在执行函数时遇到await关键字时node.js执行的操作如下:
- 进行函数调用
- 解释器看到该函数被声明为异步,这意味着它将始终返回一个promise.
- 解释器开始执行该功能.
- 当遇到await关键字时,它会暂停该函数的进一步执行,直到正在等待的promise被解决.
- 然后该函数返回一个未解决的promise.
- 此时,解释器继续执行函数调用之后的任何内容(通常是fn().then()后面跟着其他代码行). .then()处理程序尚未执行,因为尚未解析承诺.
- 在某些时候,这个Javascript序列完成并将控制权返回给解释器.
- 解释器现在可以自由地从事件队列中提供其他事件.进入await关键字的原始函数调用仍处于暂停状态,但现在可以处理其他事件.
- 在未来的某个时刻,正在等待的原始承诺得到解决.当在事件队列中处理该事件时,先前挂起的函数在等待之后继续在该行上执行.如果还有await语