yield本身没有返回值,总是返回undefined,但是next可以带一个参数,作为上一个yield的返回值
// 下面代码中的a始终的undefined,除非你在下次调用next的时候,传入参数,那么a就是这个参数 function* fn () { const a = yield something; }next的参数可以传递参数进而改变当前继续执行的函数上下文环境
最后目前node v12以上使用的是真正的协程,不是语法糖形式的,可以显示堆栈暂停、继续的位置,比如:
async function foo() { await bar(); return 41; } async function bar() { await Promise.resolve(); throw new Error('ceshiceshi'); } foo().catch((error) => { console.log(error.stack); }); // error info: // // Error: ceshiceshi // at bar (/Users/xx/forTest/app.js:8:11) // at async foo (/Users/xx/forTest/app.js:2:5)有兴趣的朋友可以试一下。