什么时候应该使用错误优先回调?

时间:2016-03-29 14:48:06

标签: javascript node.js

定义函数回调处理程序有两种常用方法:

传递单个成功和失败的回调函数

function doAsynchCall(on_success,on_fail){
    //do stuff
    if(condition === true){
        on_success(data);
    }
    else
    {
        on_fail(error);
    }
}

或在同一个回调中处理成功/失败响应(错误优先,错误回复,节点式

function doAsynchCall(callback){
    //do stuff
    if(condition === true){
        callback(null,data);
    }
    else
    {
        callback(error,null);
    }
}

我注意到这两个版本都得到了使用,两者都有效,并且涉及到某种程度的个人选择,但我确信有一些事实可以支持为什么一个版本可能比其他版本更受欢迎,或者使用保证一个在另一个。

TL; DR;

使用错误优先回调有哪些好处和缺点?

1 个答案:

答案 0 :(得分:3)

从功能的用户的角度来看,我认为第一种方式更好。原因是它为他/她留下了更少的工作,并且还允许更清晰的代码。用户不必担心确定是否发生错误,他知道在发生错误时将调用他的错误处理程序。

// Clean, modularized logic

function success() {
  // handle success
}

function error() {
  // handle error
}

doAsynchCall(success, error);

在第二种方式中,通过简单地调用该函数,用户不知道是否发生了错误,并且基本上必须再次执行if语句的工作来确定在哪里继续。

// does essentially the same stuff as doAsynchCall
function handler(error, data) {
  if (error !== null) {
    // handle error
  } else {
    // handle success
  }
}

doAsynchCall(handler):

然而,从功能设计师的角度来看,情况基本上是倒置的。对于他/她来说,总是将错误作为第一个参数传递并让用户确定如何处理以及是否对错误进行分支更容易。

function doAsynchCall(callback) {
    let data = getDataOrAnErrorHappens(); 
    callback(error, data);
}