我正在考虑建立一个承诺队列的场景:
//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);
}
我正在考虑实施一个名为function
的resolver
:
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循环时是否可以将参数传递给生成器。
不,不可能将参数传递给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()
。