問題タブ [request-promise]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
node.js - alexa-app と request-promise のネットワークの問題
ここでは本当に単純なものが欠けている必要がありますが、ここに行きます。
私はちょうど今、Alexa の開発を学び始めたところですが、Alexa のプログラミングを本当に簡単にするように見える alexa-app モジュールを見つけました - 私が遭遇しているこのネットワークの問題を除いて。
ここでは、AirportInfo というチームが提供するサンプル アプリについて説明します。問題領域のコードは次のとおりです。
次に、これらの関数を呼び出します。
これは私には良さそうに見えますが、コードを実行すると、応答がデバイスに送り返されるタイミングを制御するメインの alexa-app の「リクエスト」が予想よりも早く返されます。return rp(options)
選択した空港の予想される気象情報を含む完全な応答ペイロードの代わりに、呼び出しが行われた直後に応答が返されます。.then()
最初のコードサンプルのブロックで実行されるコードは、スキルが空の応答に相当するものをAlexaに送り返した後に実行されます。これにより、Alexa がスキルのエラーに関する不可解なメッセージを発するため、実際に Alexa がクラッシュします。
ここに私のserver.jsコードがあります:
そして、これが私が説明しているこの状態を示すデバッグログです:
preRequest Fired
とpostRequest Fired
を基準にして表示される場所に注意してくださいsuccess - received airport info for dfw
。私が間違っていることはありますか?ノード環境で何かが誤って構成されているか、または依存関係のバージョンが不適切である可能性がありますか? Nodeコマンドプロンプトからデバッガー(VS Code)で失敗し、Lambdaからも同じように失敗するため、疑わしいです。
完全なソース コードへのリンク: https://github.com/bignerdranch/alexa-airportinfo
node.js - request-promise により、開かれているソケットが多すぎます
私は現在、ユーザー入力を受け取り、トレーニングデータで単語が何回発生したかに基づいて、ユーザーのコメントが属していた可能性のある最上位のサブレディットを返す関数を作成しようとしています。さまざまなサブレディットの単語の頻度を含むデータベースがあり、各サブレディットとユーザー入力のすべての単語に対して GET リクエストを作成しています。
私のデータベースには 7000 以上のサブレディットがあるので、これは多くの get リクエストを追加します。現在、すべてのサブレディットのリストを取得するために、要求と約束 (浅い) 要求を行っています。次に、subreddit ごとに、ユーザー入力の各単語をループし、別の request-promise オブジェクトを作成して、それを promise の配列に追加します。
すべての request-promise オブジェクトが追加されたら、Promise.all を使用してそれらがすべて解決されるまで待ちます。次に、指定された subreddit の単語頻度の配列を出力しようとしますが、「エラー: EMFILE に接続してください」というメッセージが表示されます。 .
スタック オーバーフローに関する別の投稿によると、これは開いているソケットが多すぎることを意味しますが、それがどのように発生するかについては混乱しています。私の理解では、 Promise.all が解決するのを待っている間に実行されるリクエストであるため、一度に最大で user_words.length の接続が開かれることはありませんか? 接続が閉じられていない方法がわかりません。
助けてくれてありがとう!
node.js - ETIMEDOUT で失敗する request-promise をデバッグする方法
NodeJS6 と request-promise を使用して Debian 6 を実行しています。request-promise を使用して Web フックを配信しています。現在、毎日約 2+M の Web フックを配信しています。
ほとんどの場合、すべてが正常に実行されますが、HTTP 要求が配信されない場合があります。
これは私の簡単なコードです:
エンドポイントが何も受信しない場合があります。パッケージが通過したかどうかを確認するためにtsharkを実行しようとしました-どのサーバーにも何もありません。
それが発生した場合、リクエストが通過するのと同じパラメーターでcurlコマンドを実行します。
NodeJS を再起動すると、正常に配信されるようになります。
これはエラー出力です:
何をすべきか?
特にcurlが機能する場合、接続は問題ないはずです。