我正在使用Koa.js框架和Mongoose.js模块。
通常从MongoDB获得结果,我这样编写代码:
var res = yield db.collection.findOne({id: 'my-id-here'}).exec();
但是我需要对名为“ items”的数组的每个元素执行此行。
items.forEach(function(item) {
var res = yield db.collection.findOne({id: item.id}).exec();
console.log(res) // undefined
});
但是,此代码不会运行,因为函数中包含yield。如果我这样写:
items.forEach(function *(item) {
var res = yield db.collection.findOne({id: item.id}).exec();
console.log(res) // undefined
});
我也没有得到res变量的结果。我试图使用“ generator-foreach ”模块,但这种方式不起作用。
我知道这是我对Node.js的语言素养缺乏了解。但是你们能帮我找到一种方法吗?
公认的答案是错误的,不需要使用库,数组已经是可迭代的。
这是一个古老的问题,但是由于它尚无正确答案,并且出现在Google搜索的第一页上,关键词为“ iterators and forEach”,因此我将回答这个问题:
由于数组已经符合可迭代的API,因此无需遍历数组。
在生成器内部,只需使用“ yield *数组”(请注意*),yield *表达式用于委派给另一个生成器或可迭代对象
例:
有关示例和详细信息,请访问:https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/yield *