私は現在、ユーザー自身のWebサーバーに統合されるAPI /ルーターを開発中です。私のコードは必要な作業を行いますが、このスニペットのように後で自分のロジックを実装することもできます:myApi.on('action', (err, result, req, res) => {/*user's logic here*/})
。コールバックパラメータを含まない関数を約束する方法は?
私のコードは、ユーザーがデフォルトの動作を上書きして独自のロジックを実装することを決定した場合、応答を終了しません。これは、要求および応答が、ユーザによって必要に応じて次のミドルウェア機能に落ちることを可能にするためである。私が望む
制御フローは次のようになります。応答がない持っている場合
は、次のミドルウェア機能に私の最初のルートロジック
を実行し、ユーザーのカスタム・ロジック
パス制御を実行します終了しました
ユーザーは非同期ロジックを実装する必要があります。私は、次のミドルウェア機能にコントロールを渡す前に、ユーザーのカスタムロジックが終了することを許可する方法がありません。私はそれが私が設定したインターフェースのためだと信じています。ユーザーができるだけ忙しい仕事をしたいと思っています。これは、私が自分のロジックのすべてのエンドポイントで呼び出す必要があるcallback()
またはnext()
関数に相当するものをユーザに渡すことを好まないことを意味します(私のルータにはいくつかの異なるルートが含まれています)。
私はpromisify-nodeのような有望なラッパーを調べましたが、最終的な引数としてコールバックを取る関数しかラッピングできないようです。私はまた、ユーザーがカスタム実装から約束を返すように要求していると考えましたが、それはビジーワーク/定型コードを必要としないという私の望みに反するものです。
約束を使用する方法はありますか?または他の構成を使用していますか?この非同期問題をユーザーに苦痛を与えることなく処理できますか?
リクエストが終了したことをどのように定義しますか? – Amit
@Amit、私は要求と応答を切り替えたようです。 res.finishedタグをチェックして**レスポンス**が終了したかどうか確認します。 – TheKingOfTyrants