最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Node系列-callback的首个参数为什么是error?

    正文概述 掘金(Endl)   2021-05-03   711

    原文: nodejs.org/en/knowledg…

    对于Node.js来说,异步函数很重要的一个理念就是callback回调函数来处理异步操作的返回结果。

    写过一些Node的相关同学一开始可能会好奇为什么回调函数callback的第一个参数总是error呢?

    在Node.js中,这种实现被认为是一种处理异步操作的错误的标准操作。如果errro参数是一个Error对象,我们认为异步操作发生的错误; 反之如果正确,则为null

    光说不练假把式,下面是一个demo:

    var isTrue = function(value, callback) {
      if (value === true) {
        callback(null, "Value was true.");
      }
      else {
        callback(new Error("Value is not true!"));
      }
    }
    
    var callback = function (error, retval) {
      if (error) {
        console.log(error);
        return;
      }
      console.log(retval);
    }
    
    // Note: when calling the same asynchronous function twice like this, you are in a race condition.
    // You have no way of knowing for certain which callback will be called first when calling the functions in this manner.
    
    isTrue(false, callback);
    isTrue(true, callback);
    

    运行结果:

    { stack: [Getter/Setter],
      arguments: undefined,
      type: undefined,
      message: 'Value is not true!' }
    Value was true.
    

    从上面的例子可以看出,如果没有发生错误的时候,回调函数的第一个参数就是null。然而如果存在错误,第一个参数就是一个Error对象(此时只需要传入一个参数即可)。

    从上面的例子其实可以看出为什么error需要作为回调函数的第一个参数,这里在简单总结一下:

    通过将error参数作为回调函数的第一个参数,可以让开发者很容易判断是否出现的错误,从而及时截断,不再继续执行其他操作。

    另外一个角度来看:

    如果回调函数的第一个参数不是error,那开发者应该怎么样去判断异步操作的结果是否符合预期呢?答案只有一个:只能去判断回调函数的唯一参数【异步操作的返回结果】是否符合你的预期,如果不符合预期,执行对应操作;反之,执行符合预期的操作。

    显然,这种方式对于开发者不太友好,也不太方便。

    因此Node.js把回调函数的第一个参数作为error,表示异步操作返回结果是否符合预期来作为一个标准规范。


    起源地下载网 » Node系列-callback的首个参数为什么是error?

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元