私はnodejsアプリケーションを開発し、bluebird.js - Promiseを使用しています。チェーン内で各.then()メソッドが実行された後に呼び出すメソッドがあります。 bluebird.jsでこれをサポートする方法(またはAPI)がありますか?各Promise.then関数の後に共通のメソッドを実行する
ありがとうございました。
私はnodejsアプリケーションを開発し、bluebird.js - Promiseを使用しています。チェーン内で各.then()メソッドが実行された後に呼び出すメソッドがあります。 bluebird.jsでこれをサポートする方法(またはAPI)がありますか?各Promise.then関数の後に共通のメソッドを実行する
ありがとうございました。
これにはブルーバード監視APIを使用できます。
Promise.config({
monitoring: true
});
then
が連鎖して、コールバックが実行された時に知っておくpromiseFulfilled
イベントに耳を傾けている検出するpromiseChained
イベントに聞く:
var candidates = new WeakSet(); // a set for our promises that were chained
process.on('promiseChained', (_, {promise, child}) => {
candidates.add(child);
});
process.on('promiseFullfilled', (_, {promise}) => {
if(candidates.has(promise)) {
callYourFunctionHere(); // HERE
}
});
これが実行すべてのthen
ハンドラで実行されますもしpromise
(引数)がそれに連鎖しているのか、それともそれがそれであるのかを確認してから、の具体的なのためにそれを実行したいのであれば、候補に追加する前に - セットの中で(それはチェーンの一部です)。
私はそれぞれに特別なコールバックを作成したいと思います。例:
"then"で使用する3種類のコールバックがあるとします。
function callbackA() {
console.log('A');
return Promise.resolve();
}
function callbackB(hello) {
console.log('B',hello);
return Promise.resolve();
}
function callbackC() {
console.log('C');
return Promise.resolve();
}
//Then you have your "then" handler:
function handler(cb, context, params) {
context = context || this;
params = params || [];
//Do your "on-every-then stuff
console.log("It's a THEN!!!");
//Then run your desired callback
return cb.apply(context, params);
}
//And your main code:
callbackA()
.then(handler(callbackB, this, ["there"]))
.then(handler(callbackC));
フィドルhere。
新しいプロミス(...)の場合は、(...)。then(...)。then(...); '、あなたのメソッドが3回呼び出されることを期待していますか? – Martial
いいえ、それを行うための組み込みの方法はなく、 'Promise.prototype.then()'をパッチすることによってそれをハックしようとしても、かなり複雑になります。本当の問題が何であっても解決できるように、あなたが解決しようとしている実際の問題を記述してください。 – jfriend00
'.then()'が呼ばれた後にあなたのメソッドを呼び出そうとしていますか?または、 '.then()'に渡された 'resolveHandler'または' rejectHandler'が呼び出された後でもかまいませんか?これらは 'resolveHandler'や' rejectHandler'が '.then()'が呼ばれてから長く呼ばれるのとはまったく異なる2つのことです。 – jfriend00