JavaScriptの非同期処理のコールバック関数は、処理が複雑になるとネストが深くなり、コードの可読性が下がります。Promise
オブジェクトはこれを防ぎ、同期的なコードを記述できるオブジェクトです。
🗽 Promiseの使い方
Promiseオブジェクトの使い方は次の2つに分けられます。
- Promiseオブジェクトの生成
- 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のメソッドチェインには同期的な処理を混ぜ込むことができます。
const twice = function (num) { return new Promise (function(resolve) { resolve(num * 2); }); }
const dump = function (num) { console.log(num); return num; }
twice(20) .then(twice) .then(dump) .then(twice) .then(dump);
|
この実行結果はこちら。
node promise_with_sync.js 80 160
|
🚜 参考リンク
🖥 VULTRおすすめ
「VULTR」はVPSサーバのサービスです。日本にリージョンがあり、最安は512MBで2.5ドル/月($0.004/時間)で借りることができます。4GBメモリでも月20ドルです。
最近はVULTRのヘビーユーザーになので、「ここ」から会員登録してもらえるとサービス開発が捗ります!