【发布时间】:2016-09-19 11:09:24
【问题描述】:
我正在为我的数据库创建种子数据。种子函数是 co-wrapped generator (https://www.npmjs.com/package/co):
createSeedData () {
co(function * () {
[...]
}
}
在某一时刻,我尝试创建 40 个拍卖,每个拍卖都有一个出价。 到目前为止,我有一个这样的 for 循环:
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在yield与数组一起使用时支持并行执行。
但是我仍然需要先创建发票,然后使用收益为其出价。
我尝试将上述内容包装在一个 Promise 和一个内部共同包装的生成器函数中,但它永远不会完成执行。
我该如何解决这个问题?(如果可能,不使用更多包)
这是我对内部生成器的尝试:
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
【问题讨论】:
-
承诺救援,确实!请向我们展示您对内部生成器的尝试。另外,
create返回什么,它是否已经使用了 Promise? -
@Bergi
create返回一个承诺。我添加了内部生成器。
标签: javascript node.js co