ホームページ  >  に質問  >  本文

NodeJS Promise がランダムな状況で未定義の値を返す

まず、この質問にすでに回答がある場合は申し訳ありませんが、この種の質問を検索しましたが、役立つものは何も見つかりませんでした。

mysql npm パッケージを使用してデータベースにクエリを実行する NodeJS アプリケーションを開発しています。私は、Promise の助けを借りて正常に動作するいくつかのクエリを作成しました (それが SQL モジュールの動作方法であるため)。クエリプロシージャ関数 get_works (以下に定義) が正常に呼び出される場合は問題ありません。 ただし、Express Router でこの手続き型関数を呼び出すと、奇妙な動作が発生します。

リーリー

データベースへのクエリに未定義の値がない場合がありますが、1 つの未定義の値があると、後続のすべての値も未定義になります。

リーリー

これは私の約束のラッパーです:

リーリー

ただし、次のようにルーターの外部でこの関数を呼び出すと、完全に機能します:

リーリー ###私は何か見落としてますか?望ましい結果が得られるので、すべてのクエリは正しいと思います。問題は非同期/待機処理にある可能性があります。ご協力いただきありがとうございます。

編集1

@tromgy の提案に従って、Promise ラッパーを書き直しました。

リーリー

ただし、拒否

は決して発生しません (データベース内に一致するデータがないため、これは当然のことです)。ログをクリーンアップするために、別のデータベース接続を使用した同様のリクエストに対して別のルーターを無効にしました。このルーターを削除するとバグも解決しました。これがどのようにして可能なのかわかりません (おそらく変数がグローバルとして宣言されているので、その種の問題を探します)。

P粉321584263P粉321584263277日前374

全員に返信(1)返信します

  • P粉063862561

    P粉0638625612024-01-17 09:49:18

    図に示すように、問題は共有ループ カウンタです。私の同僚の 1 人が、反復する前に let キーワードを追加するのを忘れたため、for ループによって値がジャンプされました。

    私は今この JavaScript 機能が嫌いです。助けてくれてありがとう!

    返事
    0
  • キャンセル返事