2016-07-23 6 views
3

ノード用のモジュールpg-promiseを使用して、すべてのクエリで別々のファイルを作成しました。ほとんどの場合、クエリの後にちょうどreq, resを使用していますが、1つは値を戻したいです。それは動作しません。 undefinedを返します。pg-promiseに戻る

passportLogin: (email)=> { 
     db.one(`SELECT userid 
       FROM user`) 
      .then(result => { 
       return result; 
      }) 
      .catch(error => { 
       return error; 
      }); 
    } 
+0

戻り値を持たない関数を定義するので、何を期待していますか? 'db.one()'の前に 'return'を追加して、約束を得るべきです。 – Sirko

+0

'db.one()'の前に 'return'を追加し、他の2つの' return'を取り除くと、空のオブジェクトが返されます。 – ocram

+0

あなたの 'then()'と 'catch()'は、とにかくここではあまり役に立たないので、すべて一緒に取り除いてください。 – Sirko

答えて

1

このコードは、同時に2つの問題があります。

  • 無効約束の使用、.catchの内側にあなたがreturn resultを行う、それは約束の不合格品の処理方法ではありません、あなたは、エラー処理を提供しなければならないのいずれかまたはエラーを再スロー/再拒否します。
  • pg-promiseライブラリの無効な使用。 1つのレコード以外が返されたときに拒否するメソッドoneを使用すると、as per the method's documentationと同時に、論理的な矛盾であるI need to catch if it returns more than one row...と言っています。

次のようにそれの結果は次のとおりです。あなたのクエリが正常に実行され、今度は拒否one方法になります複数のレコードを返し、その後、あなたは拒否理由を取得し、実行して解決するものにそれを回しますreturn result。つまり、あなたのコードは全面的に壊れています。

まず、pg-promiseを使用すると、正しい方法を使用するはずです。返す予定のレコード数に応じて、The Basicsを参照してください。

そして、あなたのビジネスロジックに従って.then/.catchを処理します。私はあなたがこれについてさらに詳しく述べなかったので、ここではもっと具体的にすることはできません。

関連する問題