Javascript 如何正确使用带回路的发电机

Javascript 如何正确使用带回路的发电机,javascript,generator,co,Javascript,Generator,Co,假设数组中有一些数据,我们需要将每个数组项保存在mongodb 下面是一段代码,我如何尝试做到这一点: const co = require('co'); const Model = new require('./mongoose').Schema({...}); const data = [ {...}, {...}, {...}, {...} ]; function* saveData() { for (let i = 0; i < dat

假设数组中有一些数据,我们需要将每个数组项保存在
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`);
});
const co=require('co');
const Model=newrequire('./mongoose').Schema({…});
常数数据=[
{...},
{...},
{...},
{...}
];
函数*saveData(){
for(设i=0;i{
控制台日志(i);
});
}
屈服函数*(){console.log(`xxx`);};
}
co(保存数据)。然后(()=>{
log(`end.Do here some cool things`);
});
我希望在保存所有数据后会输出“结束”,控制台如下所示:

0
1
2
3
xxx
结束。在这里做些很酷的事情

但我得到的是:

0
1
2
xxx
结束。在这里做一些很酷的事情
三,

如何将代码修复为:
1.保存所有项目后,使代码输出
xxx

2.使代码输出
结尾…
真正在结尾


这能解决你的问题吗? 改变


基本上,既然你做出了一个承诺,我的蜘蛛侠意识就是想知道这个承诺的顺序是如何运作的。通过使用.then,您可以保证生成器在console.log完成之前不会屈服。

这是否解决了您的问题? 改变

基本上,既然你做出了一个承诺,我的蜘蛛侠意识就是想知道这个承诺的顺序是如何运作的。通过使用.then,您可以保证生成器在console.log完成之前不会屈服

yield (new Model(data[i])).save(() => {
            console.log(i);
        });
yield (new Model(data[i])).save().then(() => console.log(i));