私のnode.jsアプリケーションにasync.jsを使用しています。私は次の問題を解決するための助けが必要です。Async.jsデザインパターン
私は次のaysnc jsシリーズの機能を持っています。
async.waterfall([
function getDataFromDB(request, response, callback){ ... },
function someOperationOnDBData(dbData, response, callback){ ... },
function renderSomeFlow(evaluatedData, response, callback){ ... }
]);
私は、上記の順番で3つの機能を呼び出しています。私はgetDataFromDB
からデータを受け取り、someOperationOnDBData
などに渡しています。
getDataFromDB
とsomeOperationOnDBData
の間にもう1つの操作が必要だとしますが、DBDataを引き続き転送します。例:ここでは
async.waterfall([
function getDataFromDB(request, response, callback){ ... },
function extraOperation(dbData, response, callback) {...}
function someOperationOnDBData(dbData, extraOperationData, response, callback){ ... },
function renderSomeFlow(evaluatedData, response, callback){ ... }
]);
が途中でシングルステップを追加するには、関数定義を変更しても、私はちょうどsomeOperationOnDBData
に転送するextraOperation
でdbData
を渡す必要があります。 また、途中で別のモジュールを呼び出す場合、一部のデータを転送するパラメータを変更できないことがあります。
中間関数でデータを転送せずにasync.jsの関数間でデータを渡すこの問題を解決するにはどうすればよいですか?新しいステップが含まれるたびに機能をリファクタリングすることは不可能です。このタイプの問題を解決するための設計パターンは何ですか?
はちょっとした話題ですが、私はあなたが約束する必要があると思います。 – Hitmands
@Hitmandsもっと詳しく教えていただけますか?約束はどのようにこの問題を解決するでしょうか? – dejavu
@dejavuプロミスには、本来のプロミスに滝をつけることができないので、あなたのメソッドのリファクタリングが必要です。しかし、あなたが行うことができるのは、あなたが操作して追加するチェーンを通して単一のオブジェクトを送信することです。次に、そのチェーン内のすべてのメソッドで関数シグネチャを変更しません。矛盾するプロパティ名がない限りさらに、コールバックよりもはるかに複雑なフローを作成し、チェーンを平坦化します。コールバック地獄はもうありません。私は毎回のコールバック以上の約束を選ぶだろう。 – ste2425