【问题标题】:JavaScript asyncronous callback error handlingJavaScript 异步回调错误处理
【发布时间】:2016-12-13 12:03:13
【问题描述】:

我有一个关于回调、错误和异步函数的问题。 下面我们有一个异步 JS 回调的示例,如果有错误,它会处理错误。否则它会对收到的对象做一些事情。

doSomething(aThing, function(error, response) {
  if (error) {
    return handleError(error);
  } else if (response) {
    return doSomething;
  }
});

我想,如果出现错误,其中一个参数是错误对象,另一个是nullundefined

我的问题是:匿名回调function (function(error, response){...})怎么知道error参数实际上是错误?如果回调函数是function(response, error){...} 怎么办?

【问题讨论】:

  • 您需要确保这种协调是正确的。 JS 是动态类型的,因此不会为您检查,因此您需要确保正确使用任何 API。因此,例如,如果您使用 3rd 方 API,并且它接收回调来处理错误,那么您有责任阅读文档并确切知道应该为回调传递什么。并且该 API 的创建者需要确保仅以文档中描述的方式调用回调。
  • 好的,非常感谢眯眼。所以基本上它可能会根据 API 发生变化,有些可能会在第一个参数上传递错误,而在第二个参数上传递其他一些错误。在 Node 中,他们同意将第一个参数上的错误作为标准传递。
  • 没错。因为没有静态类型检查,所以 API 文档非常重要。负责任的开发团队将彻底记录其 API 的行为,并保证记录的行为不会改变。当团队决定需要进行重大更改时,他们会在引入更改之前发出一段时间的弃用通知。所以是的,您需要编写代码来遵循您正在使用的 API。

标签: javascript jquery error-handling asynccallback


【解决方案1】:

这是 NodeJS 中常用的模式:Error First Callback

基本上,每个回调都应至少使用一个参数来指示是否存在错误...

所以,如果第一个参数是null你可以假设没有错误...

var fs = require('fs');

fs.readFile("somefile.txt", function(err, data) {
  if(err) {
    console.log('We have some error', err);
    return;
  }
  
  //do something with your data
  console.log('success', data);
});

【讨论】:

    【解决方案2】:

    它不会知道这是一个错误,它只会像你说的那样返回 null 或 undefined 。通常,如果您尝试使用未定义的东西,但您希望它是从数据提取中定义的,您会收到错误。

    处理错误的一种方法是,如果您从中提取的数据显示为 undefined 或 null 即..

    if (data.response === undefined || data.response === null){
    define error
    }
    if (error) {do something}
    

    【讨论】:

      猜你喜欢
      • 2016-03-30
      • 2019-02-12
      • 1970-01-01
      • 2020-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-14
      相关资源
      最近更新 更多