两句话概括generator

2017-04-16  本文已影响0人  乔治yuanbo

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...方式。

上一篇下一篇

猜你喜欢

热点阅读