没有重复的一个try/catch by瀑布函数(使用异步瀑布)



我正在使用异步瀑布,我有一个关于try/catch错误的问题。

我不想用一个全局try/catch和不重复的try/catch by函数来规避这种语法方法:

async.waterfall([
function (callback) {
  try {
     this.foo() // Ok
     this.bar() // Method bar doesn't exist so without try/catch node will crash
  } catch(ex) {
     //print err
  }
},
function (callback) {
  try {
     //Again & again
  } catch(ex) {
     //print err
  }
}
//... function() with try catch ...
], function(err, result) {
   //Do something
})

如果您寻求一个更健壮的错误处理系统;试试这个:

var async = require('async');

function callbackErrorHandler(fn, callback) {
  try {
    fn()
  } catch (err) {
    callback(err);
  }
}
async.waterfall([
  function(callback) {
   callbackErrorHandler(function() {
     throw new Error('error1');
   }, callback);
  },
  function(callback) {
    callbackErrorHandler(function() {
      throw new Error('error2');
    }, callback);
  }
],
//final
function(err, result) {
  console.log(err);
});

/**
 * Using Promises
 */
 var async = require('async');
//promises
var Promises = require('bluebird');
function callbackErrorHandler(fn) {
  return new Promises(function(resolve, reject) {
    try {
      resolve(fn()); //should return something
    } catch (err) {
      reject(err);
    }
  });
}
async.waterfall([
    function(callback) {
      callbackErrorHandler(function() {
        throw new Error('error1');
      })
      .error(callback)
    },
    function(callback) {
      callbackErrorHandler(function() {
        throw new Error('error2');
      })
      .error(callback)
    }
  ],
  //final
  function(err, result) {
    console.log(err);
  });

此脚本不再打印在最终回调和崩溃节点服务器中:

测试这个并尝试通过testt()重命名Test()

'use strict'
var async     = require('./lib/node_modules/async')
function test()
{
    console.log("hi !")
}
async.waterfall([
  function(callback){
    callback(null)
  },
  function(callback){
    test()
    callback(null, null)
  }], function (err, result) {
        if (err)
        {
            console.log("got an error !")
        }
        else
        {
            console.log("everyting is ok")
        }
  }
)

相关内容

  • 没有找到相关文章

最新更新