Promise.all不使用异步内部函数

时间:2017-07-22 20:29:27

标签: javascript node.js mongodb es6-promise

我有一个物品清单(菜肴),我需要从mongodb获得每个项目(菜)的所有者。我正在使用promises来执行此操作

 Dish.find({})
    .limit(lim)
    .sort({created : 1})
    .exec()
    .then(function(dishes){
        if (!dishes) {
            return next(new errors.ResourceNotFoundError('The resource you requested could not be found.'))
            next()
        }

        return dishOwners.getOwners(dishes)
    })
    .then(function(data){
        return res.send(200, data)
        next()
    })
    .catch(function(err){
        return next(new errors.InternalError(err.message))
        next()
    })

dishOwners.getOwners(dish)函数返回一个Promise.all,它可以获取所有菜肴

module.exports.getOwners = function(dishes){

return Promise.all(dishes.map(function(dish){
    User
      .findOne({_id:dish.created_by})
      .then(function(user){
           return {
             dish: dish,
             owner: user
           }
      })
      .catch(function(err){
          log.error(err.message)
      })
  }))
 }

问题在于

    return res.send(200, data)
    next() 
在Promise.all得到解析之前调用

,因此从我知道promise.all的方式返回null,这应该不是这样。

安静的承诺,任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

您错过了getOwners中的退货声明。你的代码应该是:

module.exports.getOwners = function(dishes){

return Promise.all(dishes.map(function(dish){
    return User
      .findOne({_id:dish.created_by})
      .then(function(user){
           return {
             dish: dish,
             owner: user
           }
      })
      .catch(function(err){
          log.error(err.message)
      })
  }))
}

由于这个错误,您传递Promise.all一组undefined值,因此会立即解决。