プロミスの使い方についてちょっと混乱します。 以下の例をご覧ください。promise.all []を使用するかチェーンコールを停止するときに例外をキャッチするにはどうすればいいですか
Q1。チェーンコールを停止するにはどうしたらいいですか?コードが示すように
const wait = (duration = 0) => {
return new Promise((resolve) => {
setTimeout(resolve, duration);
});
};
const asyncTask1 =() => {
return wait(1000).then(() => {
console.log('task1 takes 1s.');
});
};
const asyncTask2 =() => {
return wait(3000).then(() => {
console.log('task2 takes 3s.');
});
};
Promise.resolve()
.then(() => {
asyncTask1();
})
.then(() => {
asyncTask2();
})
.catch(() => {
console.log('fail.');
});
asyncTask1
が完了するまで、asyncTask2
は実行されません。しかし、問題は、asyncTask1
が失敗した場合に、チェーンコールを停止する方法です。つまり、asyncTask1
が失敗するためが実行されません。 です。 注:asyncTask1でエラーまたは例外が生成されていないため、asyncTask1の結果を決定するためにステータス(成功または失敗)を使用します。
Q2。 Promise.all()を使用すると、どのタスクが例外を生成するかをどのように知ることができますか?
const wait = (duration=0) => {
return new Promise((resolve) => {
setTimeout(resolve, duration);
});
};
const asyncTask1 =() => {
return wait(1000).then(() => {
console.log('task1 takes 1s.');
});
};
const asyncTask2 =() => {
return wait(3000).then(() => {
console.log('task2 takes 3s.');
});
};
Promise
.all([asyncTask2(), asyncTask1()])
.then(() => {
console.log('all done.');
})
.catch((e) => {
console.log('error');
});
上記のコードは正常に実行できますが、asyncTask1
またはasyncTask2
が失敗した場合、それはキャッチ機能になります。したがって、例外はasyncTask1
かasyncTask2
かどうかをどのように知ることができますか?
で
.map()
コールバック内で発生する要素のthrow
index
ちょうどごとに固有のエラーをスローして、あなた、配列で設定した機能を呼び出すためにArray.prototype.map()
を使用することができますそれがどのエラーであるかを調べるためにエラーを検査することができる。それ以外の場合は、 'Promise.all()'をいつ使用するかを知る方法がありません。それは、最初の拒絶を、それがどれであるかの報告なしで報告するだけである。 – jfriend00'新しいプロミスの実行者関数が** 2つの引数をとっていることを知っておきたいと思うかもしれません...' '新しいプロミス((解決する、拒絶)=>拒否( 'しばらく))')は、/fulfill it –
"*コードが示すように、asyncTask1が完了するまで、asyncTask2は実行されません。そのためには、 'then'コールバックから' return'edというタスクを約束する必要があります。それ以外の場合は、チェーンで待たされることはありません。 – Bergi