1

非同期ウォーターフォールを使用していますが、try/catch エラーについて質問があります。

この構文メソッドを 1 つのグローバルな try/catch で回避し、関数による try/catch を重複させたくありません。

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
})
4

2 に答える 2

0

このスクリプトは、最終コールバックで出力されなくなり、ノード サーバーがクラッシュします。

これをテストして、test() の名前を testt() に変更してみてください

'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")
        }
  }
)
于 2015-02-23T17:08:23.253 に答える
0

より堅牢なエラー処理システムを求める場合。これを試して:

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);
  });
于 2015-02-23T16:56:37.677 に答える