情報アイランド

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

Node.jsで複数のモジュールのプロミスを相互変換する

2016/09/02

プロミスの相互変換

プロミスは下のような様々なモジュールで提供されています。

  • promise
  • rsvp
  • bluebird
  • q
  • when

また、ECMAScript 6で追加されたPromiseクラスもプロミスの1つです。

しかし、これらのプロミスは最も基本的な機能を除いて、互いに異なる機能を提供していることがあります。

そのため、あるモジュールのプロミスを別のモジュールのプロミスに変換する必要が生じる場合があります。

複数のモジュールのプロミスを相互変換するにはプロミスクラスのresolve関数を使用します。

var promise = require('promise');

var p = promise.resolve(p);

第1引数に別のプロミスクラスのインスタンスを指定します。

返り値としてそのプロミスクラスのインスタンスが得られます。

サンプルコード1

promiseモジュールのプロミスをECMAScript 6のプロミスに変換する例です。

promise-resolve-1.js

var promise = require('promise');
var util = require('util');

var pres = new promise(function (resolve, reject) {
    setTimeout(function () {
        util.log('promise resolve.');
        resolve('pres');
    }, 1000);
});
var pres2 = Promise.resolve(pres);

console.log(pres.done);
console.log(pres2.done);

使用パッケージ

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

実行結果

promiseモジュールのプロミスにはdone関数が存在し、ECMAScript 6のプロミスには存在しないことが分かります。

C:\work\node>node promise-resolve-1.js
[Function]
undefined
9 Jul 16:19:23 - promise resolve.

サンプルコード2

ECMAScript 6のプロミスをpromiseモジュールのプロミスに変換する例です。

promise-resolve-2.js

var promise = require('promise');
var util = require('util');

var pres = new Promise(function (resolve, reject) {
    setTimeout(function () {
        util.log('promise resolve.');
        resolve('pres');
    }, 1000);
});
var pres2 = promise.resolve(pres);

console.log(pres.done);
console.log(pres2.done);

使用パッケージ

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

実行結果

promiseモジュールのプロミスにはdone関数が存在し、ECMAScript 6のプロミスには存在しないことが分かります。

C:\work\node>node promise-resolve-2.js
undefined
[Function]
9 Jul 16:23:43 - promise resolve.

関連

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

-Node.js