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

🚜 参考リンク

🖥 VULTRおすすめ

VULTR」はVPSサーバのサービスです。日本にリージョンがあり、最安は512MBで2.5ドル/月($0.004/時間)で借りることができます。4GBメモリでも月20ドルです。 最近はVULTRのヘビーユーザーになので、「ここ」から会員登録してもらえるとサービス開発が捗ります!

📚 おすすめの書籍