私はes7スタイルのasync/awaitメソッドでbabeljsを使用しています。すべてが promise を返すオブジェクトの配列に対して async メソッドを呼び出すメイン スクリプトがあります。Promise.all() を使用してそれらすべてが戻るのを待ちますが、これらのタスクには時間がかかる可能性があり、しきい値を超えた場合はすべてを中止し、タスクはそれを適切な方法で処理します。
とにかくそのようなことを達成することはありますか?現在、私が考えることができる唯一の方法は、これらのメソッドを呼び出す作業を行うプロセスを生成し、それらがすべて解決されるのを待つことです。制限時間に達した場合、プロセスを強制終了し、必要な処理を行うことができます。
更新: メイン スクリプトが待機しているこれらのメソッドに関するいくつかの明確化...それらは長い一連の操作 (外部システムの呼び出し、どこかでのファイルのストリーミングなど) を実行しており、個別にキャンセルできる単一のアクションを実行していない可能性があります。
更新 #2: テストされていない半疑似コード
class Foo1 {
async doSomething() {
// call some external system
// copy some files
// put those files somewhere else (s3)
}
}
class Foo2 {
async doSomething() {
// Do some long computations
// Update some systems
}
}
class FooHandler {
constructor() {
this.fooList = [];
}
async start() {
await Promise.all(this.fooList.map(async (foo) => {
return await foo.doSomething();
}));
}
}
let handler = new FooHandler();
handler.fooList.push(new Foo1());
handler.fooList.push(new Foo2());
// if this call takes too long because of slow connections, errors, whatever,
// abort start(), handle it in whatever meaningful way, and continue on.
await handler.start();