【问题标题】:When should an error-first callback be used?什么时候应该使用错误优先回调?
【发布时间】:2018-06-09 12:21:04
【问题描述】:

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

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

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

或在同一回调中处理成功/失败响应(error-first、err-back、node-style

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

我注意到这两个版本都被使用了,都可以工作,并且涉及到一定程度的个人选择,但我确信有一些事实可以支持为什么一个版本可能比其他版本更受欢迎,或者在某些情况下使用权证一个接一个。

TL;DR;

使用错误优先回调有什么好处和坏处?

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

    从函数用户的角度来看,我认为第一种方式更好。原因是它为他/她留下了更少的工作,并且还允许更简洁的代码。用户不必担心是否发生错误,他知道如果发生错误,他的错误处理程序将被调用。

    // 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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-08
      • 2023-04-02
      • 2011-04-15
      • 2017-04-10
      • 2012-03-19
      相关资源
      最近更新 更多