まず、この質問にすでに回答がある場合は申し訳ありませんが、この種の質問を検索しましたが、役立つものは何も見つかりませんでした。
mysql npm パッケージを使用してデータベースにクエリを実行する NodeJS アプリケーションを開発しています。私は、Promise の助けを借りて正常に動作するいくつかのクエリを作成しました (それが SQL モジュールの動作方法であるため)。クエリプロシージャ関数 get_works
(以下に定義) が正常に呼び出される場合は問題ありません。
ただし、Express Router でこの手続き型関数を呼び出すと、奇妙な動作が発生します。
データベースへのクエリに未定義の値がない場合がありますが、1 つの未定義の値があると、後続のすべての値も未定義になります。
リーリーこれは私の約束のラッパーです:
リーリーただし、次のようにルーターの外部でこの関数を呼び出すと、完全に機能します:
リーリー ###私は何か見落としてますか?望ましい結果が得られるので、すべてのクエリは正しいと思います。問題は非同期/待機処理にある可能性があります。ご協力いただきありがとうございます。編集1
リーリー
ただし、拒否は決して発生しません (データベース内に一致するデータがないため、これは当然のことです)。ログをクリーンアップするために、別のデータベース接続を使用した同様のリクエストに対して別のルーターを無効にしました。このルーターを削除するとバグも解決しました。これがどのようにして可能なのかわかりません (おそらく変数がグローバルとして宣言されているので、その種の問題を探します)。
図に示すように、問題は共有ループ カウンタです。私の同僚の 1 人が、反復する前に
let
キーワードを追加するのを忘れたため、for ループによって値がジャンプされました。私は今この JavaScript 機能が嫌いです。助けてくれてありがとう!