javascript - ES6 yield的一点疑惑
天蓬老师
天蓬老师 2017-04-10 18:04:16
[JavaScript讨论组]
function* f() {
    yield 1;
    yield 2;
    return 'ending';
}

var generator = f();

setTimeout(function() {
    generator.next()
    console.log(generator.next())
}, 1000);

console.log(generator.next())
console.log(generator.next())

程序输出为神马不是:

{ value: 1, done: false }
{ value: 2, done: false }
{ value: ending, done: true }

而是

{ value: 1, done: false }
{ value: 2, done: false }
{ value: undefined, done: true }
天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(4)
巴扎黑
function* f() {
    yield 1;
    yield 2;
    return 'ending';
}

var generator = f();

setTimeout(function() {
    generator.next()//[1]
    console.log(generator.next())//[2]
}, 1000);

console.log(generator.next())//[3]
console.log(generator.next())//[4]

先执行 [3] [4],然后超时定时器符合时间要求后,执行[1] [2]
[3] [4]有输出
[1]没有输出
[2]有输出

{ value: 1, done: false } //[1]输出
{ value: 2, done: false } //[2]输出
{ value: undefined, done: true }//[4]输出

如果

function* f() {
    yield 1;
    yield 2;
    return 'ending';
}

var generator = f();

setTimeout(function() {
    console.log(generator.next())//[1]
    console.log(generator.next())//[2]
}, 1000);

console.log(generator.next())//[3]
console.log(generator.next())//[4]

那么将看到

{ value: 1, done: false } //[1]输出
{ value: 2, done: false } //[2]输出
{ value: 'ending', done: false } //[3]输出
{ value: undefined, done: true }//[4]输出
PHPz
function* f() {
    yield 1;
    yield 2;
    return 'ending';
}

var generator = f();

setTimeout(function() {
    console.log(generator.next())
}, 1000);

console.log(generator.next())
console.log(generator.next())

/*
{ value: 1, done: false }
{ value: 2, done: false }
{ value: ending, done: true }

*/
大家讲道理

.....不是说console了generator才会执行并输出。调用next就会执行,只是你没有打印出来而已

阿神

你那里延时了1s,先执行
console.log(generator.next())
console.log(generator.next())

再执行
function() {

generator.next()
console.log(generator.next())

}

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号