2017-06-24 20 views
0

私はJSで約束を学び始めました。私は約束を使って私の既存のコールバックロジックを置き換えようとしています。私は新しい約束を返し、データベースインスタンスの約束を使ってデータを取得する関数を書いた。しかし、私はそれを正しくやっているかどうかはわかりません。ここで私はresolve条件付きで使用でき、新しい約束を返す関数で別の約束を使うには?

usersService.js

var getUsers = function(queryObject) { 
    return new Promise(function(resolve, reject) { 
     dbConnection.find(queryObject) 
      .then(function(result) { 
       if (result.length > 0) { 
       resolve(result) 
       } else { 
       resolve(errorMessage.invalidUser()) 
       }).catch(function(err) { 
       reject(err) 
      }); 
      }) 
    }; 

usersRouter.js

router.get('/users', function (req,res,next) { 
    var queryObject = { "userId":req.query.userId }; 
    userService.getUsers(queryObject) 
      .then(function (data) { //some logic }) 
      .catch(function (err) { //some logic }); 
}); 
  1. コードスニペットのですか?
  2. 答えがの場合、いいえ、正しいアプローチは何ですか?
  3. また、私は正しい方法で約束をルータで使用していますか?事前に

ありがとう!

+0

あなたはタイプミスしている: ' – melpomene

+0

@melpomeneは、それは一種の予期せぬ'決意(errorMessage.invalidUser()) 'のだ – PhaniMahesh

+0

を' resovle(結果)を編集しました。おそらく 'reject(errorMessage.invalidUser())'をしたいと思うでしょう。 – Danosaure

答えて

0

dbConnection.findは約束を返しますので、直接返すことができ、解決するときに何が渡されるかを選択できます。それを他の約束の中に包む必要はありません。

var getUsers = function (queryObject) { 
    return dbConnection.find(queryObject).then(function (result) { 
     if (result.length > 0) { 
      return result 
     } else { 
      return errorMessage.invalidUser() 
     } 
    }) 
}; 
+0

dbと話しているときに何か例外が発生するとどうなりますか?つまり、(dbConnectionの)キャッチブロックをどのように活用できますか? catchブロックに別のreturnステートメントを記述し、その戻り値がインスタンスまたはエラーであるかどうかを確認する必要がありますか? – PhaniMahesh

+0

私のために、それは最後にエラーをキャッチする方が良いですが、私はそれがあなたが達成したいものに依存すると思います。あなたはすでにルータのエラーをキャッチしていますので、それは問題ありません。 – Gatsbill

+0

エラーの原因は、間違ったuserIdです。の検索結果はゼロです。私は、dbConnection自体が約束したエラーについて質問していました。 – PhaniMahesh

関連する問題