今更ですが、async/await
を学びました。
##async/awaitとは
今までPromise等を使って書いていた非同期処理をもっと簡素に書くことができる構文。
async
とawait
というワードを使用する。
##動作確認環境
- node.js: v10.14.0
- OS: Mac
##async
関数宣言
。
関数の前にasync
を宣言することで、この関数はPromise
を返すようになる。
以下の2つの例は同じことを意味する。
Promiseを使った例
function promiseSample() {
return new Promise(function(resolve, reject){
resolve("promise sample");
});
}
promiseSample().then(function(value){
console.log(value); // "promise sample"
});
asyncを使った例
async function asyncSample() {
return "async sample"
}
asyncSample().then(function(value){
console.log(value); // "async sample"
});
async
を宣言した関数は、呼び出されるとPromiseを返す。
関数内で値をreturnしていたらその値をresolve
し、例外などを投げていたらreject
する。
上記例で見る限りでも、Promiseを使っている関数(promiseSample)より、asyncを宣言している関数(asyncSample)の方が簡潔に書くことはできている。
##await
演算子
。
asyncを宣言した関数をよび出す前に書くことで、関数のPromiseが解決するのを待つ。
await
はasync
を宣言した関数内でしか使うことができない。
以下の2つの例は同じことを意味する。
Promiseを使った例
function promiseSample() {
return new Promise(function(resolve, reject){
resolve("promise sample");
});
}
function waitPromise() {
return promiseSample().then(function(value){
return value;
});
}
waitPromise().then(function(value){
console.log(value); // "promise sample"
});
async/awaitを使った例
async function asyncSample() {
return "async sample"
}
async function waitAsync(){
var value = await asyncSample();
return value;
}
waitAsync().then(function(value){
console.log(value); // "async sample"
});
##個人的な感想
確かに、async/await
を使った方が短く、簡潔にかけると感じました。
非同期のコードを書くときは大抵ネストがどんどん深くなっていくので、そうなればなるほど良さが出てきそうです。
その一方、まだ慣れていないため、Promise
というワードがある方が非同期感があってわかりやすい(認識しやすい)と感じてしまっています。。。
ただ、Promiseというワードで見ていたところがasync/await
になっただけなので、時間の問題かなと思っています。
どんどん使っていこうと思います。