在schema.save方法之前运行外部函数

时间:2016-12-02 12:09:50

标签: javascript node.js express mongoose

据我所知,Mongooses schema.save()方法异步是自然。是否可以按顺序在schema.save()方法之前运行外部函数,以便在外部函数完成处理之前不会调用schema.save()

//External function 
incrementTotal(req,res);

    newSurvey.save(function (err, data) {
        if(err) {
             sendJsonResponse(res, 400, err)
        } else{
            console.log("3")
             sendJsonResponse(res, 200, data);
        }
    });

问题:

在某些情况下newSurvey.saveincrementTotal完成处理之前运行。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

您可以将您的内容保存在incrementTotal回调中。像Promises等这样的图书馆有助于解决这些问题。

incrementTotal(req,function(err,res){
  if(!err){
     newSurvey.save(function (err, data) {
       if(err) {
          sendJsonResponse(res, 400, err)
       } else{
         console.log("3")
         sendJsonResponse(res, 200, data);
       }
     });
  }else{
    console.log(err);
   }
});

答案 1 :(得分:0)

如果您使用async库,则可以使用waterfall。它需要一系列串行执行的函数,每个函数都将结果传递给数组中的下一个。如果任何任务将错误传递给回调,则不执行下一个函数,并立即调用主回调并显示错误。

async.waterfall([
  incrementTotal,
  mySaveFunction,
],
function (err, result) {
  if (err) {
    sendJsonResponse(res, 400, err)
  } else {
    console.log("3")
    sendJsonResponse(res, 200, data);
  }
});

function incrementTotal(callback) {
  callback(null, data);
}

function mySaveFunction(data, callback) {
  // 'data' is the result of incrementTotal
  // so this should be newSurvey.save
  callback(null, data);
}