【ワンピースで覚えるJavaScript】第15回 非同期処理 Promise/async/await(プログラミング入門講座)
今回はJavaScriptの非同期処理を解説していきます。
これは理解しにくい内容ですよね。
1つ1つコードの意味を確かめながら、理解していきましょう!
/* Promise / async / await
非同期処理 ある処理が終了するのを待たずに、別の処理を実行すること
*/
console.log("1人目ゾロ");
console.log("2人目ナミ");
console.log("3人目ウソップ");
console.log("4人目サンジ");
console.log("--setTimeoutを利用");
console.log("1人目ゾロ");
//setTimeout(関数, 時間)
//setTimeout(() => console.log("2人目ナミ"), 3000);
console.log("3人目ウソップ");
console.log("4人目サンジ");
//JavaScriptは処理を待てない!
/*
console.log("--入れ子setTimeout--")
const luffy_members = () => {
console.log("1人目ゾロ");
setTimeout(() => {
console.log("2人目ナミ");
setTimeout(() => {
console.log("3人目ウソップ");
setTimeout(() => {
console.log("4人目サンジ");
}, 1000);
}, 1000);
}, 1000);
};
luffy_members();
*/
//処理の順番に約束を!「Promise」
/*
console.log("--Promiseを利用");
console.log("1人目ゾロ");
new Promise((resolve, reject) => {
setTimeout(() => {
console.log("2人目ナミ");
//resolve();
//reject();
resolve("ウソップ");
}, 3000);
})//.then(() => { console.log("3人目ウソップ");})
.then((usoppu) => { console.log("3人目" + usoppu); })
.then(() => { console.log("俺がキャプテンだ!"); })
.catch(() => { console.log("3人目はまだです"); })
.finally(() => { console.log("仲間が増えた!!"); });
*/
/*
new Promise((resolve, reject) => { 非同期処理の本体 });
resolve 成功を通知する関数
reject 失敗を通知する関数
非同期処理本体の中で resolve() reject()を呼び出す
非同期処理の結果を受け取るメソッド
then: 成功した時の処理(resolve()が呼び出されたとき)
cattch: 失敗した時の処理(reject()が呼び出されたとき)
finally: 成功/失敗に関わらす、完了の処理
*/
/*
console.log("--Promise(thenつなげる)");
new Promise((resolve) => {
setTimeout(() => {
console.log("1人目ゾロ");
resolve();
}, 1000);
})
.then(() => {
return new Promise((resolve) => {
setTimeout(() => {
console.log("2人目ナミ");
resolve();
}, 1000);
});
})
.then(() => {
return new Promise((resolve) => {
setTimeout(() => {
console.log("3人目ウソップ");
resolve();
}, 1000);
});
})
.then(() => {
return new Promise((resolve) => {
setTimeout(() => {
console.log("4人目サンジ");
resolve();
}, 1000);
});
});
*/
//async, await
/* Promiseを利用した構文よりも、簡潔に非同期処理が書ける
async 非同期関数を定義する関数宣言!
ex) async function sample() {}
async functionは呼び出されるとPromiseを返す。
値をreturnした場合、Promiseは戻り値をresolve
例外,throwした場合、その値をreject
*/
//関数は非同期関数
straw_hat_pirates = async () => {
await become_member("1人目ゾロ"); //関数の前にawaitがあるので
await become_member("2人目ナミ"); //Promiseの結果がくるまで待つ
await become_member("3人目ウソップ");
await become_member("4人目サンジ");
};
const become_member = (member) => {
return new Promise((resolve) => {
setTimeout(() => {
console.log(member);
resolve();
}, 1000);
});
};
console.log("--async awaitを利用--")
straw_hat_pirates();
この記事が気に入ったらサポートをしてみませんか?