yield
就像一张嘴,执行到yield
的时候,嘴张开并把一个东西吐出(generator外面)去,然后一直保持张开状态不动,等外面喂进来另一个东西,再执行generator里面yield
以下的代码。
next
先喂给generator一个东西,然后获取yield
吐出来的东西,一个yield
需要外边调两次next才能完成,第一次接收吐出值,第二次喂回一个新值。
举例:
function *myGenerator() {
console.log('start');
var foo = yield 2;
console.log(foo);
console.log('end');
}
var it = myGenerator();
var fromIt = it.next(); //先把undefined喂给it,再接收yield吐出来的值
setTimeout(() => {
var final = it.next('toGenerator');//把字符串'toGenerator'喂给it
}, 1000);
如果只是这样,也没什么大用,generator的威力配合Promise才能发挥出来,通常用法是yield吐出一个Promise,然后在Promise执行完成后,把Promise的结果喂回去,这样在generator内部,代码看起来就像是在同步执行,异常处理也是同步的try...catch...
方式。