並行して実行されている 4 つの関数があります。間に 1 つの関数が失敗した場合、他の関数の実行を停止するにはどうすればよいですか。これに関するヘルプは本当に役に立ちます。
質問する
1637 次
3 に答える
1
関数の実行を停止することはできません。関数は同期的に実行され、返されるため、技術的に停止するものは何もありません。しかし、何らかの方法で基礎となる libuv 機能を使用する非同期タスクが存在する可能性があります (つまり、非同期ノード API またはネイティブ モジュールを呼び出さずに非同期処理を実行することはできません)。関数はそのようなタスクの単なるインターフェースであり、タスクのキャンセルはサポートせず、開始のみをサポートします。
したがって、非同期操作を実際にキャンセルすることはできませんが、実行できることは、他の操作が失敗した場合にその結果を無視することです。実装方法は次のとおりです。
var tasks = [], //array of tasks, functions accepting callback(err)
pending = tasks.length, //amount of pending tasks
failed = false;
function done(err) { //callback for each task
if (failed) return;
if (err) {
failed = true;
callback(err); //callback for all tasks
}
if (!--pending) callback(); //all tasks completed
}
tasks.forEach(function(task) {
task(done);
});
于 2013-10-15T10:37:40.777 に答える
0
Async ライブラリを使用する必要があると思います。Asyncには、関数を並行して実行する並列関数が含まれています(もちろん)。そして、各関数はコールバック (エラー、結果) を受け取ります。エラーが発生した場合、Async は他のすべてのプロセスをカットします。
于 2013-10-15T06:56:50.680 に答える