Node.jsでthenableを作成する
2016/09/02
thenableとは
thenableとはプロミスにおける概念であり、プロミスのthen
関数と同じ動作のthen
関数を有するオブジェクトのことです。
プロミスとは?
プロミスとは プロミスとは非同期的な処理を表すオブジェクトです。 非同期的な処理を表す古典的な方法には非同期コールバック関数がありました。あるいは、非同期イベントがありました。 非同期コールバック関数とは?非同期イベントとは?Node.jsにおける非同期的な処理の表現Node
thenableはプロミスと他の非同期的な処理との相互運用において重要です。
なぜなら、thenableはプロミスに変換することができるからです。
thenableをプロミスに変換するにはプロミスクラスのresolve
関数を使用します。
var promise = require('promise');
var p = promise.resolve({
then: function (resolve, reject) {
resolve('xxx');
//or
resolve(new Promise(function (resolve, reject) {
//...
}));
//or
reject(new Error('yyy'));
//or
throw new Error('zzz');
}
});
第1引数にthenableを指定します。
返り値としてプロミスが得られます。
また、thenableを作成するにはthen
という名称の関数を有するオブジェクトを作成します。
この関数はプロミスクラスのコンストラクタの第1引数と同様に実装します。
サンプルコード1
promise-thenable.js
var promise = require('promise');
var util = require('util');
var pres = promise.resolve({
then: function (resolve, reject) {
util.log('task 1 start.');
setTimeout(function () {
util.log('task 1 complete.');
resolve('task 1');
}, 10000);
}
});
var prej = promise.resolve({
then: function (resolve, reject) {
util.log('task 2 start.');
setTimeout(function () {
util.log('task 2 complete.');
reject(new Error('task 2'));
}, 5000);
}
});
pres.done(function (result) {
util.log(result);
}, function (err) {
console.error(err);
});
prej.done(function (result) {
util.log(result);
}, function (err) {
console.error(err);
});
使用パッケージ
- promise
npm install promise
でインストールします。
実行結果
C:\work\node>node promise-thenable.js
9 Jul 16:50:08 - task 1 start.
9 Jul 16:50:08 - task 2 start.
9 Jul 16:50:13 - task 2 complete.
Error: task 2
at Timeout._onTimeout (C:\work\node\promise-thenable.js:19:11)
at tryOnTimeout (timers.js:224:11)
at Timer.listOnTimeout (timers.js:198:5)
9 Jul 16:50:18 - task 1 complete.
9 Jul 16:50:18 - task 1
関連

スポンサーリンク