生成器和协程

要搞懂生成器函数为何能暂停和恢复运行,先搞懂协程的概念。
一个线程可以用多个协程,但是在线程上同时只能执行一个协程。
协程不是被操作系统内核所管理,而是完全是程序控制(在用户态执行)。

function * genDemo() {
  yield ‘123’;
  yield ‘456’;
  return ‘789’;
}
const gen = genDemo();
console.log(gen.next().value);
console.log(gen.next().value);

通过调用genDemo创建一个协程gen
通过gen.next把控制权交给协程gen
当协程gen执行中遇到了yield,则把控制权交还给父协程
当协程gen执行return,则结束当前协程,并把控制权交还给父协程

每个协程有自己的调用栈,当切换协程的时候会保存当前协程的调用栈信息,恢复控制权的调用栈信息。

常见面试问题:setTimeout、Promise、Async/Await 的区别

这个问题,在之前的我,我的回答基本上是围绕着“减少回调地狱链/用同步的方式写异步代码/进阶点就是宏任务和微任务”

现在了解了async/await协程的原理,这个问题的回答逼格可以提高一档。


一画先生
83 声望12 粉丝

我司长期招聘前端开发工程师,有意的小伙伴+vx: Mr_yihua