生成器和协程
要搞懂生成器函数为何能暂停和恢复运行,先搞懂协程的概念。
一个线程可以用多个协程,但是在线程上同时只能执行一个协程。
协程不是被操作系统内核所管理,而是完全是程序控制(在用户态执行)。
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协程的原理,这个问题的回答逼格可以提高一档。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。