面试题答案
一键面试设计思路
- 统一错误捕获:在每个异步操作中,使用
try...catch
块捕获可能发生的错误,并将错误传递给下一个环节。 - 错误处理中心:设置一个统一的错误处理函数,当任何一个异步操作出错时,调用该函数进行处理。
- 防止连锁反应:确保错误处理不会影响其他独立的异步操作。
代码示例(以JavaScript为例)
function readFromDatabase() {
return new Promise((resolve, reject) => {
// 模拟异步操作
setTimeout(() => {
// 这里假设50%的概率出错
if (Math.random() > 0.5) {
resolve('Data from database');
} else {
reject(new Error('Database read error'));
}
}, 1000);
});
}
function processData(data) {
return new Promise((resolve, reject) => {
setTimeout(() => {
try {
if (!data) {
throw new Error('Data is missing');
}
// 处理数据
const processedData = data.toUpperCase();
resolve(processedData);
} catch (error) {
reject(error);
}
}, 1000);
});
}
function writeToFile(data) {
return new Promise((resolve, reject) => {
setTimeout(() => {
try {
if (!data) {
throw new Error('Data is missing');
}
// 模拟写入文件
console.log('Writing data to file:', data);
resolve('Data written successfully');
} catch (error) {
reject(error);
}
}, 1000);
});
}
function handleError(error) {
console.error('Error in async operation chain:', error.message);
// 可以在这里进行更复杂的错误处理,如记录日志、通知监控系统等
}
readFromDatabase()
.then(processData)
.then(writeToFile)
.catch(handleError);
在上述代码中:
- 每个异步操作(
readFromDatabase
、processData
、writeToFile
)都返回一个Promise
,并且在内部使用try...catch
来捕获可能的错误,并通过reject
将错误传递出去。 handleError
函数作为统一的错误处理中心,在整个操作链中的任何一个环节出错时都会被调用。- 这种方式确保了即使在异步操作链中某个环节出错,也不会影响其他独立的异步操作。