白话协程【前端视角】 (2)

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)

有兴趣的朋友可以试一下。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyzwzd.html