ES6:generator

199 阅读1分钟

generator、Iterator、promise&(async/await)关系

generator是基于Iterator迭代器规范管理promise或者异步编程的;
promise 是基于承诺模式管理异步编程
async/await是对generator的进一步封装【语法糖】

generator 实现

创建func的实例,但是和new执行不一样, func中的代码没有执行,后续iter.next()才会把这些代码执行,并且每一次执行next遇到一个yield就结束,每一次返回的结果是符合迭代器规范的{done: true/false, value:yield后面的值或者函数返回的值}

function* func() {
    console.log('A');
    yield 10;
    console.log('B');
    yield 20;
    console.log('C');
    yield 30;
    console.log('4');
    return 40;
}
let iter = func([10,20,30,40]);
console.log(iter.next());
console.log(iter.next());
console.log(iter.next());
console.log(iter.next());

执行next传递值,可以把传递值作为上一次yield后的结果,但是yield后面跟的值是给每一次next执行后的value的