1

假设我们在一个数组中有一些数据,我们需要将每个数组项保存在一个单独的文档中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...在最后真正输出

?

4

1 回答 1

0

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

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

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

基本上,既然你正在兑现承诺,我的感觉就是想知道它的排序是如何工作的。通过使用 .then,您可以保证生成器在 console.log 完成之前不会产生。

于 2017-05-12T16:35:37.507 回答