回调通常用于提供错误处理。这是控制流分支的一种形式,其中某些指令仅在发生错误时才执行:
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模式)来编写。