我正在为我的数据库创建种子数据。种子函数是共包装生成器(https://www.npmjs.com/package/co):
createSeedData () {
co(function * () {
[...]
}
}有一次,我试图创建40个拍卖,每一个出价。直到现在我才有了这样的循环:
for (let i = 0; i <= 40; i++) {
let auction = yield auction.create({
[...]
}) // Async creation of model and persisting it in db
yield bid.create({
auction: auction.id
[...]
})
}现在我想并行地创造拍卖,但我不能完全让它发挥作用。
co支持与数组一起使用产量时的并行执行。
然而,我仍然需要首先创建一个发票,然后一个出价它使用收益率。
我试着将上面的内容封装在一个承诺和一个内部协同包装的生成器函数中,但它始终没有完成执行。
如何解决这个问题?(如果可能的话,不使用更多的包)
下面是我对内部生成器的尝试:
let promises = []
for (let i = 0; i <= 40; i++) {
promises.push(new Promise(
co(function *(resolve, reject) {
let auction = yield auction.create({
[...]
}) // Async creation of model and persisting it in db
yield bid.create({
auction: auction.id
[...]
})
)
resolve()
))
}
yield invoicePromises发布于 2016-09-19 16:04:46
没有必要调用new Promise (而且它不起作用,因为您从不调用resolve或reject)。只要省略这一部分,co()已经返回了一个承诺:
let promises = [];
for (let i = 0; i <= 40; i++) {
promises.push( co(function *() {
let auction = yield auction.create({
[...]
}); // Async creation of model and persisting it in db
yield bid.create({
auction: auction.id
[...]
});
));
}
yield invoicePromises;如果不想使用内部生成器,也可以使用简单的承诺进行链接:
let promises = [];
for (let i = 0; i <= 40; i++) {
promises.push(
auction.create({
[...]
}).then(auction =>
bid.create({
auction: auction.id
[...]
});
)
);
}
yield Promise.all(invoicePromises);https://stackoverflow.com/questions/39571749
复制相似问题