iが同様のオブジェクトの配列を有する:のNode.js:非同期タスクの順次実行
let builds = [
{ status: "Failed"},
{ status: "Completed"},
{ status: "Building"},
{ status: "Building"},
{ status: "Failed"},
{ status: "Cancelled"},
...
]
要素の数が変化し、それぞれのstatus
もゼロの最小アレイサイズで、変化するであろう。
:へのアレイを介し
- 反復をして
Cancelled
- するとそこに
status
Building
の更新それらの項目の
status
で任意の項目を探してください
Building
が出現しなくなりました。
{ status: "Building" }
catchは、配列がMongoDBに格納されているため、各操作を非同期の方法でDBに永続化する必要があります。私はすべてのことについてQの約束を使用しています。これを行うに
私の試みは、現時点では次のようになります。
let count=0; // Keep track of how many "builds" in "Building" state
module.getAllBuilds((builds) => {
builds.forEach((build) => {
if (build.status == "Building") {
count++;
module.cancelBuild(build)
.then(() => {
if (!--count) { // When counter is zero, all builds have been dealt with.
module.newBuild();
return;
}
})
}
})
module.newBuild(); // Get here if the build array is empty or no builds in "Building" state
})
私は多くのスタックのように、Building
状態のエントリ数を追跡するためにcount
変数を使用しています。スタックが空の場合は、新しいビルドの作成に進みます。
問題は、いずれかのビルドがBuilding
州にあるかどうかによって、2つの場所のいずれかにを呼び出す必要があるということです。
これを実装するより良い方法はありますか?ただ「ビル」のためのアレイを構築するフィルタリングによって最初に
あなたのコードが非同期タスクを「順番に」実行していることを理解していますか? –
これは逐次実行することを意図しています。 – mstubbies