1、厄运金字塔
有时候又称“回调地狱”
loadScript('1.js', function(error, script) {
if (error) {
handleError(error);
} else {
// ...
loadScript('2.js', function(error, script) {
if (error) {
handleError(error);
} else {
// ...
loadScript('3.js', function(error, script) {
if (error) {
handleError(error);
} else {
// ...加载完所有脚本后继续 (*)
}
});
}
});
}
});
在上面这段代码中:
我们加载 1.js,如果没有发生错误。
我们加载 2.js,如果没有发生错误。
我们加载 3.js,如果没有发生错误 — 做其他操作 (*)。
如果调用嵌套的增加,代码层次变得更深,维护难度也随之增加,尤其是我们使用的是可能包含了很多循环和条件语句的真实代码,而不是例子中的 …。
有时这些被称为“回调地狱”或“厄运金字塔”。
2、Error 优先回调(error-first callback)
loadScript('/my/script.js', function(error, script) {
if (error) {
// 处理 error
} else {
// 脚本加载成功
}
});
- callback 的第一个参数是为 error 而保留的。一旦出现 error,callback(err) 就会被调用。
- 第二个参数(和下一个参数,如果需要的话)用于成功的结果。此时 callback(null, result1, result2…) 就会被调用。
因此,单一的 callback 函数可以同时具有报告 error 和传递返回结果的作用。