JavaScript 错误处理和控制流分支

示例

回调通常用于提供错误处理。这是控制流分支的一种形式,其中某些指令仅在发生错误时才执行:

const expected = true;

function compare(actual, success, failure) {
  if (actual === expected) {
    success();
  } else {
    failure();
  }
}

function onSuccess() {
  console.log('Value was expected');
}

function onFailure() {
  console.log('Value was unexpected/exceptional');
}

compare(true, onSuccess, onFailure);
compare(false, onSuccess, onFailure);

// 输出:
//   "Value was expected"
//   "Value was unexpected/exceptional"

compare()上面的代码执行有两个可能的分支:success期望值和实际值相同时以及error不同时。当控制流应在某些异步指令之后分支时,这特别有用:

function compareAsync(actual, success, failure) {
  setTimeout(function () {
    compare(actual, success, failure)
  }, 1000);
}

compareAsync(true, onSuccess, onFailure);
compareAsync(false, onSuccess, onFailure);
console.log('Doing something else');

// 输出:
//   "Doing something else"
//   "Value was expected"
//   "Value was unexpected/exceptional"

应该注意的是,多个回调不必是互斥的–可以调用这两种方法。类似地,compare()可以使用可选的回调(通过使用noop作为默认值-参见Null Object模式)来编写。