情報アイランド

「情報を制する者は世界を制す」をモットーに様々な情報を提供することを目指すブログです。現在はプログラミング関連情報が多めですが、投資関連情報も取り扱っていきたいです。

Node.jsでプロミスに関する情報を取得する

プロミスに関する情報を取得する機能は下のプロミスクラスで提供されています。

  • bluebirdクラス
  • q.Promiseクラス
  • when.promiseクラス

bluebirdクラス

完了状態か

プロミスが完了状態であるかチェックするにはp.isFulfilled関数を使用します。

var isFulfilled = p.isFulfilled();

返り値としてプロミスが完了状態であるかが真偽値として得られます。

エラー状態か

プロミスがエラー状態であるかチェックするにはp.isRejected関数を使用します。

var isRejected = p.isRejected();

返り値としてプロミスがエラー状態であるかが真偽値として得られます。

保留状態か

プロミスが保留状態であるかチェックするにはp.isPending関数を使用します。

var isPending = p.isPending();

返り値としてプロミスが保留状態であるかが真偽値として得られます。

キャンセルされたか

プロミスの処理がキャンセルされたかチェックするにはp.isCancelled関数を使用します。

var isCancelled = p.isCancelled();

返り値としてプロミスの処理がキャンセルされたかが真偽値として得られます。

結果

プロミスの結果を取得するにはp.value関数を使用します。

var value = p.value();

返り値としてプロミスの結果が得られます。

エラーオブジェクト

プロミスのエラーオブジェクトを取得するにはp.reason関数を使用します。

var reason = p.reason();

返り値としてプロミスのエラーオブジェクトが得られます。

q.promiseクラス

完了状態か

プロミスが完了状態であるかチェックするにはp.isFulfilled関数を使用します。

var isFulfilled = p.isFulfilled();

返り値としてプロミスが完了状態であるかが真偽値として得られます。

エラー状態か

プロミスがエラー状態であるかチェックするにはp.isRejected関数を使用します。

var isRejected = p.isRejected();

返り値としてプロミスがエラー状態であるかが真偽値として得られます。

保留状態か

プロミスが保留状態であるかチェックするにはp.isPending関数を使用します。

var isPending = p.isPending();

返り値としてプロミスが保留状態であるかが真偽値として得られます。

状態

プロミスの状態を表すオブジェクトを取得するにはp.inspect関数を使用します。

var s = p.inspect();

返り値としてプロミスの状態を表すオブジェクトが得られます。

このオブジェクトは下のようなプロパティを有します。

  • state・・・プロミスの状態です。保留状態である場合にはpendingとなり、完了状態である場合にはfulfilledとなり、エラー状態である場合にはrejectedとなります。
  • value・・・結果です。
  • reason・・・エラーオブジェクトです。

when.promiseクラス

状態

プロミスの状態を表すオブジェクトを取得するにはp.inspect関数を使用します。

var s = p.inspect();

返り値としてプロミスの状態を表すオブジェクトが得られます。

このオブジェクトは下のようなプロパティを有します。

  • state・・・プロミスの状態です。保留状態である場合にはpendingとなり、完了状態である場合にはfulfilledとなり、エラー状態である場合にはrejectedとなります。
  • value・・・結果です。
  • reason・・・エラーオブジェクトです。

サンプルコード1

下のコードではプロミスの処理をキャンセルするためにp.cancel関数を使用しています。

p.cancel関数に関しては下の記事を参照してください。

bluebird-info.js

var bluebird = require('bluebird');

bluebird.config({
    cancellation: true
});

var p1 = new bluebird(function(resolve, reject, onCancel) {
    setTimeout(function () {
        resolve('p1');
    }, 1000);
    onCancel(function() {
        console.log('p1 is canceled.');
    });
});
p1.done(function (result) {
    console.log(result);
}, function (err) {
    console.error(err);
});

var p2 = new bluebird(function(resolve, reject, onCancel) {
    setTimeout(function () {
        resolve('p2');
    }, 1000);
    onCancel(function() {
        console.log('p2 is canceled.');
    });
});
p2.done(function (result) {
    console.log(result);
}, function (err) {
    console.error(err);
});

var p3 = new bluebird(function(resolve, reject, onCancel) {
    setTimeout(function () {
        reject(new Error('p3'));
    }, 1000);
    onCancel(function() {
        console.log('p3 is canceled.');
    });
});
p3.done(function (result) {
    console.log(result);
}, function (err) {
    console.error(err);
});

console.log(p1.isFulfilled());
console.log(p2.isFulfilled());
console.log(p3.isFulfilled());
console.log(p1.isRejected());
console.log(p2.isRejected());
console.log(p3.isRejected());
console.log(p1.isPending());
console.log(p2.isPending());
console.log(p3.isPending());
console.log(p1.isCancelled());
console.log(p2.isCancelled());
console.log(p3.isCancelled());

p1.cancel();

setTimeout(function () {
    console.log(p1.isFulfilled());
    console.log(p2.isFulfilled());
    console.log(p3.isFulfilled());
    console.log(p1.isRejected());
    console.log(p2.isRejected());
    console.log(p3.isRejected());
    console.log(p1.isPending());
    console.log(p2.isPending());
    console.log(p3.isPending());
    console.log(p1.isCancelled());
    console.log(p2.isCancelled());
    console.log(p3.isCancelled());
    console.log(p2.value());
    console.log(p3.reason());
}, 2000);

使用パッケージ

  • Bluebird
    npm install bluebirdでインストールします。

実行結果

C:\work\node>node bluebird-info.js
false
false
false
false
false
false
true
true
true
false
false
false
p1 is canceled.
p2
Error: p3
    at Timeout._onTimeout (C:\work\node\bluebird-info.js:37:10)
    at tryOnTimeout (timers.js:224:11)
    at Timer.listOnTimeout (timers.js:198:5)
false
true
false
false
false
true
false
false
false
true
false
false
p2
Error: p3
    at Timeout._onTimeout (C:\work\node\bluebird-info.js:37:10)
    at tryOnTimeout (timers.js:224:11)
    at Timer.listOnTimeout (timers.js:198:5)

関連

pizyumi
プログラミング歴19年のベテランプログラマー。業務システム全般何でも作れます。現在はWeb系の技術を勉強中。
スポンサーリンク

-Node.js