javascript - TypeScript/JavaScript 或 Python 中的 await/async 程序的执行流程是什么?
问题描述
有一段时间我知道我试图围绕async/await的内部结构来思考。我是一名专注于多线程的 C++ 开发人员,这个概念会干扰 C++ 程序的执行方式。
我确实了解 Promise 对象,以及并发 != 并行性的重点,以及事件循环。我可以按照要求拥有一个单线程应用程序,该应用程序同时执行程序的不同部分,但是什么在事件循环上“创建”了一个事件?是Promise
对象吗?还是async
关键字?还是某些 I/O 函数中的某些东西不阻塞?
我知道的最接近的概念是 Python 中的全局解释器锁,其中多个线程等待全局锁,因此 Python 以循环方法执行,让每个线程执行一段代码。但是这个概念不需要事件循环,例如在 JS/TS 中只涉及一个线程。
任何人都可以帮助我(或推荐一个好的资源),这样我就可以理解执行流程或如何理解这一点?太感谢了!
解决方案
如果你理解了一个 Promise,那么 async await 就是语法糖。
async function() {
doStuff();
const x = await getSomePromise();
doStuffWithX(x);
}
是相同的
function() {
doStuff();
getSomePromise().then(function(data) {
const x = data;
doStuffWithX(x);
});
}
解释器为您执行回调包装。