es6 关于yield的疑问

生成器函数中使用yield就能表示异步了?我只了解迭代器的用法(跟python很像),关于为什么这样写就表示异步,实在没想明白。感觉只是让生成器函数的执行可以停在yield的地方?不知道怎么理解才对,请大神解释下~

阅读 2.2k
2 个回答

生成器函数中的yield语句只是把控制权转移到了调用者,并不一定是异步的 -- 如果调用者在同一个tick中将控制权转回到生成器函数那肯定还是同步的;而对应的,如果使用 co 这种异步执行的调用者,则就能异步执行了。

具体原理你可以直接查看 co 的源代码。或者很多大神已经分析过了,比如参考以下两篇文章:

阮大的:co 函数库的含义和用法
何大的:co.js 异步回调的原理

使用yield不表示异步啊.
Async/await 才是吧.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进