繁体   English   中英

如何使用循环以适当的方式使用生成器

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM