一般的なコード(非同期)
var fs = require('fs'); console.log(1); fs.readFile('first_promise.js', 'utf8', function (err, text) { console.log(2); console.log(text); console.log(3); }); console.log(4);
実行結果
1 4 2 var fs = require('fs'); console.log(1); fs.readFile('first_promise.js', 'utf8', function (err, text) { console.log(2); console.log(text); console.log(3); }); console.log(4); 3
なるほど非同期だ
bluebirdを使う
bluebirdモジュールのインストール
npm install bluebird
var fs = require('fs'); var Promise = require('bluebird'); console.log(1); Promise.promisifyAll(fs); console.log(2); fs.readFileAsync('first_promise.js', 'utf-8').then(function(value) { console.log(3); console.log(value); console.log(4); }, function(error) { console.error(error); });
実行結果
1 2 3 var fs = require('fs'); var Promise = require('bluebird'); console.log(1); Promise.promisifyAll(fs); console.log(2); fs.readFileAsync('first_promise.js', 'utf-8').then(function(value) { console.log(3); console.log(value); console.log(4); }, function(error) { console.error(error); }); 4
どうなっているの
- fsモジュールとbluebirdモジュールをrequireで読み込み
- Promise.promisifyAllを実行し、fsモジュールの全メソッドをPromise対応させる
- fs.readFileAsync
- readFileAsyncが返すPromiseオブジェクトの
.then()
を使用し非同期処理終了後に実行されるコールバック処理を登録します。つまり.then()
に非同期処理が完了した後に実行すべき処理を記述