首页 > 解决方案 > TypeScript/JavaScript 或 Python 中的 await/async 程序的执行流程是什么?

问题描述

有一段时间我知道我试图围绕async/await的内部结构来思考。我是一名专注于多线程的 C++ 开发人员,这个概念会干扰 C++ 程序的执行方式。

我确实了解 Promise 对象,以及并发 != 并行性的重点,以及事件循环。我可以按照要求拥有一个单线程应用程序,该应用程序同时执行程序的不同部分,但是什么在事件循环上“创建”了一个事件?是Promise对象吗?还是async关键字?还是某些 I/O 函数中的某些东西不阻塞?

我知道的最接近的概念是 Python 中的全局解释器锁,其中多个线程等待全局锁,因此 Python 以循环方法执行,让每个线程执行一段代码。但是这个概念不需要事件循环,例如在 JS/TS 中只涉及一个线程。

任何人都可以帮助我(或推荐一个好的资源),这样我就可以理解执行流程或如何理解这一点?太感谢了!

标签: javascripttypescriptasynchronousasync-await

解决方案


如果你理解了一个 Promise,那么 async await 就是语法糖。

async function() {
  doStuff();
  const x = await getSomePromise();
  doStuffWithX(x);
}

是相同的

function() {
  doStuff();
  getSomePromise().then(function(data) {
    const x = data;
    doStuffWithX(x);
  });
}

解释器为您执行回调包装。


推荐阅读