Node.js 异步函数是否永远不会抛出?
我编写了一个包含许多异步函数的库。 如果其中一个参数完全错误,同步辅助函数将抛出错误:Node.js 异步函数是否永远不会抛出?,node.js,asynchronous,error-handling,Node.js,Asynchronous,Error Handling,我编写了一个包含许多异步函数的库。 如果其中一个参数完全错误,同步辅助函数将抛出错误: proto.makeParameters= function( filters ){ default: throw( new Error("Field type unknown: " + fieldObject.type ) ); break; } 在我的异步函数中,当我使用它时,我有: proto.someAsyncFunction = function( cb ){ // Run
proto.makeParameters= function( filters ){
default:
throw( new Error("Field type unknown: " + fieldObject.type ) );
break;
}
在我的异步函数中,当我使用它时,我有:
proto.someAsyncFunction = function( cb ){
// Run the query
try {
var parameters = this.makeParameters( filters );
} catch( e ){
return cb( e );
}
}
因此:
- asyncfunctions永远不应该抛出是一种好的实践吗?(和我一样)
- 现在,我正在捕捉所有错误。我应该更挑剔一点吗?也许可以编一个错误类型,然后检查一下?如果是,在这两种情况下我都应该怎么做
在我看来,在提供的代码片段中,异常被正确地抛出,因为它表明该方法被不正确地调用,无法完成其工作。换句话说,错误是永久性的。这表明应用程序中存在严重缺陷,应予以修复。但是,如果函数由于某些临时原因无法创建参数,而这些临时原因可以在不修改应用程序的情况下修复,那么返回状态是更合适的选择 您对异步代码的假设是正确的。请参阅Isaac Schlueter本人关于该主题的帖子: 节点中的模式是同步方法抛出,异步方法传递 将错误作为回调的第一个参数。如果第一个 回调函数的参数为false(通常为null或未定义),则 天下无难事
对于node,您所做的是正确的习惯用法。节点回调的第一个参数应该是错误消息或未定义(或者是null?)。您对异步代码的假设是正确的。请看@HectorCorrea,并将此作为答案添加,这是最好的答案,我们愿意接受。