私は約束のためにBluebirdを使用していますが、チェーンコールを許可しようとしていますが、.bind()を使用しても動作しません。私は取得しています:Bluebird Promiseバインドチェーン
TypeError: sample.testFirst(...).testSecond is not a function
第1の方法が正しく呼び出さと約束チェーンを開始しますが、私は全くのインスタンス結合作業を取得することができたhaventはされています。
これは私のテストコードです:
var Promise = require('bluebird');
SampleObject = function()
{
this._ready = this.ready();
};
SampleObject.prototype.ready = function()
{
return new Promise(function(resolve)
{
resolve();
}).bind(this);
}
SampleObject.prototype.testFirst = function()
{
return this._ready.then(function()
{
console.log('test_first');
});
}
SampleObject.prototype.testSecond = function()
{
return this._ready.then(function()
{
console.log('test_second');
});
}
var sample = new SampleObject();
sample.testFirst().testSecond().then(function()
{
console.log('done');
});
私は経由で最新の青い鳥を使用しています:
npm install --save bluebird
私はこの間違ったに近づいていますか?助けていただければ幸いです。ありがとう。
私の仮定は、各テスト()(準備を経て構築された唯一の約束があるということでした)関数は、より多くの連鎖呼び出しのためにSampleObjectを継承し続けているpromiseのちょうどanother()連鎖です。それは可能ですか? – Pat841
いいえ、 'ready()'を呼び出すたびに新しい約束事が作成されます。それらの約束事を '.then()'で連鎖させることができます。そして、はい、それぞれのテスト関数は別のチェーンですが、あなたは私の答えでやったように、次にそれを参照する必要があります。 – superUser
しかし、ready()は、約束を返すオブジェクトコンストラクタ内で1回しか呼び出されていません。各テスト関数は、既に作成されたPromiseを介してthen()を使用します。 – Pat841