[英]How to use generators in a proper way with loops
假设我们在数组中有一些数据,我们需要将每个数组项保存在mongodb
中的单独文档中
这是一个代码我如何尝试这样做:
const co = require('co');
const Model = new require('./mongoose').Schema({...});
const data = [
{...},
{...},
{...},
{...}
];
function* saveData() {
for (let i = 0; i < data.length; i++) {
yield (new Model(data[i])).save(() => {
console.log(i);
});
}
yield function*() { console.log(`xxx`); };
}
co(saveData).then(() => {
console.log(`The end. Do here some cool things`);
});
我希望在保存所有数据并且控制台看起来如下之后,“结束”将被输出:
0
1
2
3
XXX
结束。 在这里做一些很酷的事情
但我得到的是:
0
1
2
XXX
结束。 在这里做一些很酷的事情
3
如何修复代码:
1.保存所有项目后,使代码输出xxx
2.使代码突然The end...
真的在最后
?
这会解决您的问题吗? 更改
yield (new Model(data[i])).save(() => {
console.log(i);
});
至
yield (new Model(data[i])).save().then(() => console.log(i));
基本上,既然你正在产生一个承诺,那么我的狡猾感就是想知道它的排序是如何起作用的。 通过使用.then,您可以保证在console.log完成之前生成器不会生成。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.