将req数据传递给Q promise

时间:2015-07-16 06:53:46

标签: javascript node.js express promise q

我遇到了我认为Javascript关闭的问题?我有一个Express + Mongoose网络应用程序,并使用Q库为Promises。

我想知道是否可以将请求数据传递给promise链,以便我可以成功执行以下代码。

目前,我无法设置review.reviewerreview.application。我目前唯一能想到的解决方案是将请求数据附加到req.body对象,以便在Review.create上处理所有这些(请参阅替代解决方案代码)。不过,我不确定这是否是一个理想的解决方案,是否可以将req数据传递给一个承诺。

create: function(req, res) {
    console.log('Creating obj');

    Review.create(req.body).then(function(review) {
      Q.all([
        function() {
          review.reviewer = req.user.id;
          review.application = req.params.applicationId;
          return review.save();
        },
        User.findByIdAndUpdate(review.reviewer, {$push: {reviews: review._id}}).exec(),
        Application.findByIdAndUpdate(review.application, {$push: {reviews: review._id}}).exec(),
      ]).then(function() {
        req.flash('messages', {
          style: 'success', 
          type: 'Success',
          text: 'Your review has been submitted!',
        });
        res.redirect('/applications');
      }, function(err) {
        req.flash('messages', {
          style: 'danger', 
          type: 'Error',
          text: 'Something went wrong submitting the application!',
        });
        res.redirect('/applications');
      })
    });
  }

替代解决方案代码:

req.body.reviwer = req.user.id;
req.body.application = req.params.applicationId;
Review.create(req.body).then(...)

1 个答案:

答案 0 :(得分:3)

根据我的理解,你犯了两个错误:

  • ioreg -l | grep IOPlatformSerialNumber | awk '{print substr( $0, length($0) - 6 )}' 前面应该有一个return,它只会假设Q.all,即等到Q.all完成后
  • return null的第一个元素是一个函数,我很确定它必须是一个承诺,

我已将功能详细信息放在外面,希望它现在有效:

Q.all