5

程序员似乎对如何获得有关错误的异步通知存在分歧。

一些程序员更喜欢使用带有两个参数的回调:一个值和一个布尔值,用于判断该值是否正确。这样做的好处是它看起来像一个try catch语句:

asyncFunct(function (value, noError) {
    if (noError) {
        // success, do something with value
    } else {
        // value is the error which is thrown
    }
});

其他人更喜欢负数(即布尔值应该判断值是否错误)。他们的理由是,如果您知道异步函数永远不会抛出错误,那么您可以安全地省略第二个参数,如下所示:

asyncFunction(function (value, isErroneous) {
    if (!isErrorneous) {
        // success, do something with value
    } else {
        // value is the error which is thrown
    }
});

asyncFunction(function (value) {
    // success, do something with value
});

然后有人提出了异步函数成功执行的单独回调和异步函数错误执行的errbacks。这允许程序员选择是否要处理回调、errbacks、两者或不处理:

asyncFunction(function (value) {
    // success, do something with value
}, function (error) {
    // handle the error
});

asyncFunction(function (value) {
    // success, do something with value
});

asyncFunction(null, function (error) {
    // handle the error
});

我不是在问你喜欢哪种方法。我只是询问每种方法的优缺点,以便我知道何时使用哪种方法。

4

1 回答 1

1

设计决策:

这只是设计决策,仅此而已。如果它是独立参数,您可以拥有独立功能并创建“更漂亮”的代码(对于某人 - 对于某人来说它更混乱 - 这真的很主观)。

错误复杂度:

在某些应用程序中,您可能会遇到更复杂的错误(filesystem.fileRead可以有 FILE_DONT_EXISTS、FILE_LOCKED、NOT_PERMISSIONS..),而在某些应用程序中,您只需抛出错误(db.checkConnectiondb.openConnection)。

顺序和区别:

很棒的 AP​​I 的非常好的示例来自 Amazon,您可以查看它。http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html

响应:在异步函数上,比如copyObject(params = {}, callback)你有回调函数,它总是有 2 个参数:err (Error)data (Object)in function(err, data) { ... }。错误被设计为第一个参数,因为如果有错误,就没有数据。所以这真的是关于优先级和顺序。

// request

getObject({
   param1 : something,
   param2 : something,
   param3 : something
}, callback);

// response

function callback(error, response){
   if error throw err;
   // now deal with responsei
}

如您所见,您有两种方式。在请求中,您传递对象和函数,作为响应,您得到错误和对象(到该请求函数)。

于 2014-01-16T09:47:59.400 回答