我正在研究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());
}
}
答案 0 :(得分:5)
由于您抛出错误而发生异常。如果您想将错误返回给调用者,则需要在回调中提供它。将错误作为参数添加到回调中。
通常回调模式为callback(error, result);
callback(new Error(ex.toString())); // ignore result param
答案 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'));