データベースのシード データを作成しています。シード関数は共同ラップされたジェネレーターです ( https://www.npmjs.com/package/co ):
createSeedData () {
co(function * () {
[...]
}
}
ある時点で、それぞれ 1 つの入札で 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