2017-06-24 110 views
0

我開始學習JS中的Promises,並試圖用promise來取代我現有的回調邏輯。我寫了一個函數,它返回一個新的承諾,並且還使用數據庫實例的承諾來檢索數據。但是,我不確定我是否正確。這裏是代碼片段,如何在函數中使用另一個promise來返回新的promise?

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. 我可以使用resolve條件?
  2. 如果答案是,什麼是正確的方法?
  3. 另外,我是否在路由器中以正確的方式使用承諾?

在此先感謝!

+0

你有一個錯字:'resovle(結果)' – melpomene

+0

@melpomene編輯 – PhaniMahesh

+0

這是一種不期而至'決心(errorMessage.invalidUser())'。你可能想'拒絕(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交談時遇到任何異常,該怎麼辦?我的意思是說,我怎樣才能利用catch(dbConnection)塊?我是否需要在catch塊中寫入另一個return語句,然後檢查返回值是否是我的路由器中的實例或錯誤? – PhaniMahesh

+0

對我來說,最好在最後捕捉錯誤,但我想這取決於你想完成什麼。你已經在路由器上捕獲錯誤,所以沒關係 – Gatsbill

+0

else條件中的錯誤是錯誤的userId,其中沒有。的搜索結果爲零。我問的是dbConnection承諾本身引發的錯誤。 – PhaniMahesh

相關問題