情報アイランド

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

Node.jsでプロミスの処理をキャンセルする

プロミスの処理をキャンセルする機能は下のプロミスクラスで提供されています。

  • bluebirdクラス

bluebirdクラス

bluebird.config関数

キャンセル機能はデフォルトでは無効となっています。キャンセル機能を有効にするにはbluebird.config関数を使用します。

var bluebird = require('bluebird');

bluebird.config({
    cancellation: true
});

第1引数にプロミスクラスの設定をオブジェクトとして指定します。キャンセル機能を有効にするにはcancellation設定にtrueを指定します。

p.cancel関数

プロミスの処理をキャンセルするにはp.cancel関数を使用します。

p.cancel();

この関数を呼び出した場合にはプロミスが保留状態から完了状態やエラー状態に変わることはありません。

なお、プロミスの処理がキャンセルされた場合に別の処理を行うにはプロミスの作成時にプロミスクラスのコンストラクタの第1引数の関数で3つ目の引数を受け取るようにします。

var p = new bluebird(function(resolve, reject, onCancel) {
    onCancel(function() {
    });
});

この引数はプロミスの処理がキャンセルされた場合に呼び出される関数を登録するための関数です。

この関数の第1引数はプロミスの処理がキャンセルされた場合に呼び出される関数です。

サンプルコード1

bluebird-cancel.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);
});

p1.cancel();

使用パッケージ

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

実行結果

C:\work\node>node bluebird-cancel.js
p1 is canceled.
p2

関連

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

-Node.js