nodejs如何从async.eachLimit中退出?

时间:2014-11-06 06:58:11

标签: node.js

这是我的代码 -

function lastCB(err) {
      if(err) {
        console.log(err);
      }
      if(errFlag) {
        res.send({"Message": "Some error occured"});
      } else {
        res.send({"Message" : "Success"})
      }
    };

updateabcd: function(req, res, next) {
    var Data = req.data;
    var errFlag = 0;

    function update(row,callback) {
      something.updateit(row,function(err,result){
        if(err) {
          errFlag = 1;
          //error from DB
        }
        callback();
      });
    };

    async.eachLimit(Data, 1, update, lastCB);    

我想要实现的是调用eachLimit的lastCB,如果err出现在更新函数内部,即使ecahLimit位于数组之间。

1 个答案:

答案 0 :(得分:0)

这是您的更新功能的样子:

function update(row,callback) {
  something.updateit(row,function(err,result){
    if(err) {
      errFlag = 1;
      //error from DB
      callback(err);
    } else {
      callback();
    }
  });
};

如果出现错误,您仍然必须调用回调函数,但在这种情况下,您应该将错误对象传递给它。当异步检测到错误对象被传递给它时,它将停止迭代并立即调用你的lastCB函数。

在上面的例子中,我刚刚传递了something.updateit函数返回的错误对象。但在某些情况下,您可能需要创建一个新的错误对象并将其传递给回调。这是一个例子:

function update(row,callback) {
  something.updateit(row,function(err,result){
    if(err) {
      errFlag = 1;
      //error from DB
      callback(err);
    } else {
      if (result.badData) {
        callback(new Error('Invalid data received from the database'));
      } else {
        callback();
      }
    }
  });
};