私はNodeJSを初めて使用しており、amqp 0.2.6を使用しています。私は擬似コードを持っていますamqpコールバックの確認:true not working
async.waterfall([
function(callback) {
// do logic and pass parameters to next method by calling callback
},
function(params, callback) {
// do AMQP logic and pass parameters to next method
try {
bus.publish(routingKey, message, options, function (err) {
console.log("got here");
if (err) {
console.log(err);
}
});
//callback(null, null);
} catch (err) {
console.log("ERROR: " + err);
//callback(err, null);
}
}
], function() {
// do logic with all results
});
私はいくつかの質問があります。まず、私がパブリッシュを呼び出すときに私のコールバックに何か問題がありますか?私のメッセージはうさぎに正しく送られますが、私は決してコールバックgot here
メッセージに行きません。
コールバックで始まる2行のコメントを外すと、async.waterfallの2番目の関数はすぐにコールバックを取得し、そのコールバックを呼び出して結果をasync.waterfallの最終関数に渡します。私はコールバックが発行直後に呼び出されるので、これが起こっていることを理解しています。ウサギに送られたメッセージがエラーなしでエラーなく成功したかどうかわかったら、コールバックを呼び出すのが理想的です。私はamqp publishメッセージのコールバックに到達できないので、私はこれをどうやってやるのか分かりません。エラーがある場合はtry/catchブロックに表示されますが、エラーが記録されていますが、これはasync.waterfall関数が既に終了した後です。 async.waterfallの2番目の関数に、パブリッシュメッセージ(成功または失敗)の結果を渡したいと思います。私がこれを達成できるノンブロッキングな方法は問題ありません。だから、最終的に目標は、あなたは単にあなたのbus.publish()
コールバックとして滝のコールバックを渡すことができ
async.waterfall([
function (one) {
// do logic and pass results to 'two'
},
function (two) {
// do AMQP logic, send a message, get the results of that action and pass to last function
}
], function() {
// i got my results from 'one' and 'two', do some more logic
});
私が言及したように、publish()のコールバックは何らかの理由で呼び出されないため、動作しません。 – Crystal
大丈夫、それは特定のパブリッシュメソッドの問題です。 publishメソッドのコードを提供できますか、特定のライブラリを使用していますか?それがライブラリであり、期待どおりに動作する必要のあるメソッドの引数を提供していると確信している場合は、問題が非同期ライブラリやあなたが使っているパターン。まだパブリッシュメソッド内でコールバックを呼び出して、エラーを確実にキャッチするようにする必要があります。 –
amqp 0.2.6 https://www.npmjs.com/package/amqp – Crystal