javascript - 被发电机搞糊涂了

标签 javascript ecmascript-6 generator

在下面的代码(取自 Javascript Concurrency)中,在 iterable = genMap(iterable, iteratee) for-of 循​​环之后应该有三个生成器对象。但是,yield* iterable 是单个引用。它如何从 genMap产生三组值?谢谢。

function* genMap(iterable, iteratee) {
    for (let item of iterable) {
        console.log('item', item)
        yield iteratee(item);
    }
}

function composeGenMap(...iteratees) {

    return function* (iterable) {
        for (let iteratee of iteratees) {
            iterable = genMap(iterable, iteratee);
        }

        yield* iterable; 
    }
}

// Our iterable data source.
var array = [ 1, 2, 3 ];

var composed = composeGenMap(
    x => x + 1,
    x => x * x,
    x => x - 2
);

for (let item of composed(array)) {
    console.log('composed', item)
}
// →
// composed 2
// composed 7
// composed 14

最佳答案

yield* 将执行推迟到另一个生成器,或者如果您愿意的话,也可以是可迭代的。

这意味着它在技术上可以产生多个值(在您的情况下是三个)。

来自the Mozilla Developer Network article on yield* :

The yield* expression is used to delegate to another generator or iterable object.

关于javascript - 被发电机搞糊涂了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42592660/

相关文章:

javascript - Twitter Bootstrap 3 响应式菜单不起作用

javascript - 在 Leaflet 中绘制一条跟随移动标记的折线

javascript - 手动将 es6 箭头函数转换为 es5?

javascript - Google Chrome 扩展开发中的 ES6 模块(意外标记)

javascript - 如何使用纯 JavaScript 淡入 React 组件?

javascript - 在同一页面上使用相同的 ReactJS 表单组件

ecmascript-6 - 带有 ES6 导入的原始加载器

types - 如何将生成器存储在结构中?

javascript - 如何与异步 JavaScript 生成器进行双向通信?

c - 打印单词的所有变体