面试题答案
一键面试以下是使用回调函数和箭头函数相结合并避免回调地狱的代码示例:
function asyncOperation1(callback) {
setTimeout(() => {
const result1 = '操作1的结果';
callback(result1);
}, 1000);
}
function asyncOperation2(result1, callback) {
setTimeout(() => {
const result2 = result1 + ',操作2的结果';
callback(result2);
}, 1000);
}
function asyncOperation3(result2, callback) {
setTimeout(() => {
const result3 = result2 + ',操作3的结果';
callback(result3);
}, 1000);
}
asyncOperation1((result1) => {
asyncOperation2(result1, (result2) => {
asyncOperation3(result2, (result3) => {
console.log(result3);
});
});
});
设计思路
- 独立异步操作:将每个异步操作封装成独立的函数,每个函数接受前一个操作的结果作为参数,并通过回调函数传递本次操作的结果。
- 链式调用:通过箭头函数的简洁语法,在回调函数中链式调用下一个异步操作,确保每个操作依赖前一个操作的结果。
优势
- 代码可读性:将复杂的异步操作拆分成多个独立函数,每个函数专注于一个操作,使代码结构更清晰,易于理解和维护。
- 可维护性:如果需要修改或扩展某个异步操作,只需修改对应的独立函数,而不会影响其他操作。
- 避免回调地狱:通过链式调用方式,虽然仍使用回调函数,但相比于层层嵌套的回调,代码结构更扁平,避免了回调地狱问题。