Nodejs抛出异常

时间:2015-12-01 10:13:17

标签: node.js

我正在研究Nodejs服务端应用程序,我的情况是我想返回抛出一个异常给调用者(谁调用了函数),我做了两个案例,一个在回调之外,另一个在回调中,父进程也尝试了catch块。

概念:  throw(商务功能) - > throw(商务功能) - >试试&捕获

回调外部工作正常。 回调内部没有将异常返回给父级。

我想要这个场景,因为我希望向父节点抛出一个异常并停止完成这些函数,这些存在于Java,C ++,C和.NET中。

那么为什么这种情况不能与我合作?!

我的例子有两种不同的情况:

    FactoryController.prototype.create = function (callback) {
    //The throw is working, and the exception is returned.
    throw new Error('An error occurred'); //outside callback 
    try {
    this.check(function (check_result) {
        callback(check_result);
    });
} catch (ex) {
    throw new Error(ex.toString());
}

}

FactoryController.prototype.create = function (callback) {
try {
    this.check(function (check_result) {
        //The throw is not working on this case to return the exception to the caller(parent)
        throw new Error('An error occurred'); //inside callback 
    });
} catch (ex) {
    throw new Error(ex.toString());
}

}

2 个答案:

答案 0 :(得分:5)

由于您抛出错误而发生异常。如果您想将错误返回给调用者,则需要在回调中提供它。将错误作为参数添加到回调中。

通常回调模式为callback(error, result);

callback(new Error(ex.toString())); // ignore result param

Error handling in Nodejs

答案 1 :(得分:2)

以下代码是否满足您的要求

'use strict';
var  inherits =require('util').inherits;
//Parent
function factoryController(n){
     this.name=n;
 }
 //parent prototype function
 factoryController.prototype.create = function (type) {
     var retVal="";
     try {
     throw new Error('An error occurred'); 
      retVal=this.name+' is a '+ type;
     }
     catch(e){
         retVal=e.toString();
     }
     return retVal;

}
 function subsidaryController(name) {
       // Call parent constructor 
        factoryController.call(this, name);

    }
inherits(subsidaryController,factoryController);
// Additional member functions 
 subsidaryController.prototype.fn = function (locations) {
     var retVal="";
     try {
          throw new Error('Another error occurred'); 
          retVal='Having branches in' + locations;
     }
     catch(e){
         retVal=e.toString();
     }
     return retVal;
 }   
 let fc = new subsidaryController('ABC Factory');
console.log(fc.create('Manufacturer' ));
console.log(fc.fn('Europe and Asia'));