JavaScriptのPromiseについて


JavaScriptの非同期処理のコールバック関数は、処理が複雑になるとネストが深くなり、コードの可読性が下がります。Promise オブジェクトはこれを防ぎ、同期的なコードを記述できるオブジェクトです。

😎 Promiseの使い方

Promiseオブジェクトの使い方は次の2つに分けられます。

  1. Promiseオブジェクトの生成
  2. Promiseオブジェクトの利用

Promiseオブジェクトの生成

まずPromiseオブジェクトを生成します。成功時にはresolve、失敗時にはrejectを呼び出します。

function getUrl(str) {
return new Promise(function(resolve, reject) {
const https = require(https);
https.get(url, function(res){
if (res.statusCode == 200) {
resolve(res.statusCode);
} else {
reject(res.statusCode);
}
}).on(error, function(e) {
reject(new Error(e.message));
})
});
}

Promiseオブジェクトの利用

さきほど生成したPromiseオブジェクトはthen/catchを通して利用します。

const url = "https://exampleexample.com";
getUrl(url).then(function onFulfilled(value) {
console.log(value);
}).catch(function onRejected(error) {
console.error(error);
})

🏀 Promiseに同期処理を含める

Promiseのメソッドチェインには同期的な処理を混ぜ込むことができます。

// promise_with_sync.js
const twice = function (num) {
return new Promise (function(resolve) {
resolve(num * 2);
});
}
const dump = function (num) {
console.log(num);
return num;
}
twice(20) // 20*2 -> 40
.then(twice) // 40*2 -> 80
.then(dump) // 80 を出力
.then(twice) // 80*2 -> 160
.then(dump); // 160 を出力

この実行結果はこちら。

node promise_with_sync.js
80
160

🎳 参考リンク

📚 おすすめの書籍

🖥 サーバについて

このブログでは「Cloud Garage」さんのDev Assist Program(開発者向けインスタンス無償提供制度)でお借りしたサーバで技術検証しています。 Dev Assist Programは、開発者や開発コミュニティ、スタートアップ企業の方が1GBメモリのインスタンス3台を1年間無料で借りれる心強い制度です!(有償でも1,480円/月と格安)