ES6 中 yield 的问题

${yield} 是如何执行的

我在学习 Generator 的时候看到一段不错的代码,自己改了改不知道如何去读,希望有人能解答一下,如下:


function* bar() {

  console.log('one');

  console.log('two');

  console.log('three');

  yield console.log('test');

  console.log(`1. ${yield}`);

  console.log(`2. ${yield}`);

  return 'result';

}

let barObj = bar();

barObj.next();

barObj.next('a');

barObj.next('b');

返回的结果为:


one

two

three

test

1. b

第一次 next 的时候应该走到了 yield console.log('test')

第二次传了一个 a 这个时候程序似乎没有执行


桃花长相依
浏览 483回答 3
3回答

qq_遁去的一_1

首先明确的是a执行了。barObj.next(); //输出testbarObj.next('a'); //a给了第一个yield,但是没有使用barObj.next('b'); //b给了第二yield,并输出1. b

慕尼黑8549860

自己又梳理了一下我们可以把barObj.next();barObj.next('a');barObj.next('b');改为如下的形式,这样看起来更加的方便console.log(barObj.next(), barObj.next('a'), barObj.next('b'));上面的代码应该这么来读首先要明白 console.log 的返回值是 undefinednext 1.    console.log('one')...console.log('test');    return { value: unfefined, done: false }next 2.    yield console.log('test') = 'a';    ${ yield undefined } 写括号是为了方便看,其实没有括号    return { value: undefined, done: false }next 3.    console.log(`1. ${'b'}`);    return { value: undefined, done: false }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript