当我们通过for..of迭代它时,我们可以将参数传递给生成器吗?

问题描述 投票:0回答:1

我正在考虑建立一个承诺队列的场景:

//Let's assume that promises is an array of promises
var promiseQueue = [];
for (var promise of promises) {
    if (promiseQueue.length) promiseQueue[promiseQueue.length - 1].then(promise);
    promiseQueue.push(promise);
}

我正在考虑实施一个名为functionresolver

function *resolve() {
    var promise;
    while (promise = yield) Promise.resolve(promise);
}

然后迭代它:

var promiseGenerator = resolve();

问题是这里的for..of将负责实际的迭代:

for (var r of promiseGenerator) {

}

在上面的代码中,生成器将成功迭代,但遗憾的是我不知道在for..of的迭代中成功将参数传递给此生成器的方法。

我想澄清一点,我不需要替代方案,我完全知道我们可以这样做:

for (var p in promiseQueue) promiseGenerator.next(promiseQueue[p]);

我特别想知道在执行for..of循环时是否可以将参数传递给生成器。

javascript ecmascript-6 es6-promise es6-generator
1个回答
2
投票

不,不可能将参数传递给next

function* generateItems() { /* ... */ }
for (var item of generateItems()) {
   console.log(item);
}

绝大多数是为了

function* generateItems() { /* ... */ }
var iterator = generateItems()[Symbol.iterator]();
do {
  const result = iterator.next();
  if (result.done) break;
  const item = result.value;

  console.log(item);
} while (true);

除了一些缺少try/catch包装。你可以看到in the spec here它没有参数调用.next

让nextResult成为?调用(iteratorRecord。[[NextMethod]],iteratorRecord。[[Iterator]],«»)。

EG

iterator.next.apply(iterator, []);

用空数组参数调用next()

© www.soinside.com 2019 - 2024. All rights reserved.