处理异步节点错误的最佳方法

Ela*_*ran 6 javascript asynchronous node.js

为了捕获错误,我在每个看起来很糟糕的函数中写了if-else块.请建议一种更好的方法来处理异步节点中的错误

async.waterfall([

            function(callback){

                fnOne.GetOne(req, res,function(err,result) {  

                  if(err){
                    console.error("Controller : fnOne",err);
                    callback(err,null);
                  }
                  else{

                    var fnOne = result; 

                   callback(null, fnOne);
                  }
                })            
            },

            function(fnOne, callback){

               fnTwo.two(fnOne,function(err,result) {
                  if(err) {
                    console.error(err);
                    callback(err,null);
                  }
                  else{

                    callback(null, context);
                  }
               })            
            }
        ], function (err, result) {     

           if(err){
              console.error("Controller waterfall Error" , err);
              res.send("Error in serving request.");
           }
        });
Run Code Online (Sandbox Code Playgroud)

ade*_*neo 7

您可以将错误传递给异步并在回调中捕获它

async.waterfall([
    function (callback) {
        fnOne.GetOne(req, res, callback); // err and result is passed in callback
    },                                    // as it's "function(err, result)"
    function (fnOne, callback) {          // the same as the arguments for the
        fnTwo.two(fnOne, callback);       // callback function
    }
], function (err, result) {
    if (err) {
        console.error("Error :", err);
        res.send("Error in serving request.");
    }else{
        res.end("A-OK");
    }
});
Run Code Online (Sandbox Code Playgroud)


Cyb*_*axs 5

你做的太多了

瀑布已经有内部错误管理.

callback(err,[results]) - 一旦完成所有函数,就会运行一个可选的回调函数.这将传递最后一个任务的回调结果.

试试这个

async.waterfall([
            function(callback){
                fnOne.GetOne(req,res,  callback)            
            },
            function(fnOne, callback){
               fnTwo.two(fnOne,callback) {           
            }
        ], function (err, result) {     
           if(err){
              console.error("Controller waterfall Error" , err);
              res.send("Error in serving request.");
           }
        });
Run Code Online (Sandbox Code Playgroud)