複数のジョブ機能のコードを変更する方法の1つは、ジョブ間のユーザーキャンセルフラグをチェックすることです。あなたが行う場合はキャンセルを確認することを忘れてはいけない
let userCancelled = false;
let checkCancel = function(data) {
if(userCancelled)
throw new Error("cancelled by user"); // invoke catch handling
return data; // pass through the data
}
myJob1()
.then(myJob2).then(checkCancel)
.then(myJob3).then(checkCancel)
.then(myJob4).then(checkCancel)
.then(myJob5).then(checkCancel)
.then(myJob6).then(checkCancel)
.catch(myJobError);
:チェックのこの種の粒度があまりにも当然ではない場合は、非同期的に(やや)グローバルキャンセルフラグを設定しての線に沿って進めることができあなたがしなければならないことは、それが約束を破棄するためのエラーを投げることだけです。
本当に多くの情報が必要です。特にあなたがクライアントと言うとき。あなたのクライアントには、何らかの形のRPCが用意されていますか?約束を取り消すことは簡単ですが、バックエンドには難しい部分があります。 – Keith
[EMCAScript6(バニラJavaScript)の約定をキャンセルする方法](https://stackoverflow.com/questions/29478751/how-to-cancel-an-emcascript6-vanilla-javascript-promise-chain) – TheCog
の可能な複製キャンセルすることはできませんが、却下することはできます。その後、その時の残りの部分は呼び出されなくなります。あなたはそれぞれの仕事の中で何かをテストしなければならないでしょう。そして、そのテストが合格すれば、新たに拒否された約束を返します。すなわち 'return Promise.reject( 'reason')' –