なぜPromiseが必要なのか?
- 非同期処理のコールバック関数地獄はネストが深くなる上に、エラー処理が相まって、可読性を著しく下げる傾向があります。このコールバック地獄を避けるために考えられたの仕組みが、Promiseです。
- 非同期処理中に発生した例外を扱う仕様はありませんでした。
内容
-
非同期処理についての理解
非同期処理とは 通常はコードを順番に処理していくが 非同期処理では一つのが終わるのを待たずに次の処理を評価します。 つまり非同期処理では同時に実行している処理が複数あります。 代表的なのがSetTimeout等
-
Promiseの概念を理解
非同期処理とは 通常はコードを順番に処理していくが 非同期処理では一つのが終わるのを待たずに次の処理を評価します。 つまり非同期処理では同時に実行している処理が複数あります。 代表的なのがSetTimeout等
SetTimeout例:
setTimeout(() => {
console.log("3. ブロックする処理を開始します");
blockTime(1000); // 他の処理を1秒間ブロックする
console.log("4. ブロックする処理が完了しました");
}, 10);
Promise例:
// funnction内でリターンせずにもプロミスインスタンスは作れるが引数が取れないのでこれでは使わないだろう。
const promise = new Promise(function(resolve, reject){
resolve();
});
// この形でもし使うとしたら、一つのインスタンスを作って返すようにする。
const promise = Promise.resolve(555);
// 呼び出しは
promise.then(r =>{
console.log(r);//555
});
補足(ここから細かく解説)
promise キャッチの法則
なんとなく例
setTimeout(() => {
console.log("3. ブロックする処理を開始します");
blockTime(1000); // 他の処理を1秒間ブロックする
console.log("4. ブロックする処理が完了しました");
}, 10);
参考