如何在返回新承诺的函数中使用另一个承诺?

时间:2017-06-24 14:05:52

标签: javascript node.js promise

我开始学习JS中的Promise,我试图用promises替换现有的回调逻辑。我编写了一个函数,它返回一个新的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. 另外,我是否以正确的方式在路由器中使用了承诺?
  4. 提前致谢!

1 个答案:

答案 0 :(得分:0)

由于dbConnection.find返回一个promise,您可以直接返回它,并选择解析时将传递的内容。无需将其包含在其他承诺中。

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