Javasctiptの勉強をしていて、非同期処理の所のサンプルコードの処理が理解できなかったので、コメントを追加しました。
function dummyFetch(path) {
return new Promise((resolve, reject) => {
setTimeout(() => {
if (path.startsWith("/success")) {
/* ここでresolveの引数に渡されている値({body: `Response body of ${path}`})が
.thenメソッドの第一引数にコールバック関数として定義されている関数の引数に渡される
(ここではresponse)*/
resolve({ body: `Response body of ${path}` });
} else {
reject(new Error("NOT FOUND"));
/* ここでrejectの引数に渡されている値(new Error("NOT FOUND"})が
.thenメソッドの第二引数にコールバック関数として定義されている関数の引数に渡される
(ここではerror)*/
}
}, 1000 * Math.random());
});
}
// `then`メソッドで成功時と失敗時に呼ばれるコールバック関数を登録
/* /success/data のリソースは存在するので成功しonFulfilledが呼ばれるというより、
第一引数に指定されているonFulfilled関数が呼び出されるという理解が正しい*/
dummyFetch("/success/data").then(function onFulfilled(response) {
console.log(response); // => { body: "Response body of /success/data" }
}, function onRejected(error) {
// この行は実行されません
});
// /failure/data のリソースは存在しないのでonRejectedが呼ばれる
dummyFetch("/failure/data").then(function onFulfilled(response) {
// この行は実行されません
}, function onRejected(error) {
console.error(error); // Error: "NOT FOUND"
});