Edited at

Promise, async awaitを簡単に理解する


概要

巷のPromise, async, awaitの説明が難しく至極簡単に実装ベースでの理解を書きます

自作でPromise関数を書く助けにして欲しいです

アロー使ってないとかは無視しといてください


書くこと

・Promiseの書き方一部

・async, awaitの書き方一部

・開発者としての使い道


書かないこと

・Javascriptでは外部サービス、DBなどの処理は基本的に非同期処理になること

・Promise(非同期処理)の詳しい概念


Promise, async, await

値をラップすることで戻り値Promiseが返るまで処理を一時停止する


fs = require('fs');
function hoge(){
return new Promise(function(resolve, reject){
//わかりやすいのでファイル読み込み
fs.readFile(file, function(err, data){
if (err) {
// エラーがあれば的な意味で適当です
reject(err);
return;
}
// エラーがなければresolve
resolve(data);
});
})
}

async function main(){
try{
const result = await hoge()
console.log(result) // => result = dataの中身
}catch(e){
// logとか
}
}

よく見る説明だと思います

ポイントとしては

例外を発生させたい時、rejectを渡すと呼び出し元がcatch

うまく行ったと判定できる場合

resolveに引数を渡すとawaitの返り値にその引数が入ってきます

ごく簡単な書き方ですが、Promiseの一歩目が理解できないときは実装してみると少しわかってきます


使い道とまとめ

実際コードを書くとき、基本的にはPromiseを返すライブラリを使うパターンばかりだと思うので、async, awaitで処理できることが多くPromiseの概念はおざなりになりがちだと思います。

しかし、開発を進める中でぶつかった時理解していないと辛いです。

実際、自分は実際にfileのアップロードなどの時Promiseを返す関数を実装をして、苦戦したので軽く考えをまとめました。

理解の助けになれば幸いです。