私のデータベースのシードデータを作成しています。私は1件の入札ごとに40回のオークションを作成しようとしている1点でコミットされたジェネレータを含むPromiseの並列化
createSeedData() {
co(function *() {
[...]
}
}
:シード機能は、共同ラップジェネレータ(https://www.npmjs.com/package/co)です。 今まで私は、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
は、配列で歩留まりを使用する場合の並列実行をサポートします。
しかし、私は依然としてインボイスを作成し、次にイールドを使用してインボイスを作成する必要があります。
プロミスと内部のラップされたジェネレータ関数で上記をラップしようとしましたが、実行を終了しません。
どうすればこの問題を解決できますか?ここ
は、内側の発電機との私の試みである(より多くのパッケージを使用せずに可能な場合):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
約束ちょうどその部分を省略し、
co()
はすでに約束を返します。本当に救助する!内側の発電機であなたの試みを見せてください。また、 'create'は何を返しますか?すでに約束を使っていますか? – Bergi@Bergi 'create'はPromiseを返します。私は内側のジェネレータを追加しました。 – Hedge