在下面的代码(取自 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/