面试题答案
一键面试1. 如何简化异步代码
- 避免回调地狱:在传统的基于回调的异步编程中,多层嵌套的回调函数会导致代码可读性和维护性变差,形成所谓的“回调地狱”。而
async/await
以同步风格来编写异步代码,使代码看起来更直观、简洁。 - 错误处理简化:在
async
函数中,可以使用传统的try...catch
块来捕获错误,而不像基于回调的异步代码,需要在每个回调函数中单独处理错误。
2. 示例代码
const fs = require('fs');
const util = require('util');
// 将 fs.readFile 转换为返回 Promise 的函数
const readFileAsync = util.promisify(fs.readFile);
async function readAndProcessFile() {
try {
// 读取文件内容
const data = await readFileAsync('example.txt', 'utf8');
console.log('文件内容:', data);
// 在这里处理文件内容
const processedData = data.toUpperCase();
console.log('处理后的内容:', processedData);
} catch (error) {
console.error('读取文件或处理内容时出错:', error);
}
}
readAndProcessFile();
在上述代码中:
- 首先使用
util.promisify
将fs.readFile
这种基于回调的异步函数转换为返回Promise
的函数readFileAsync
。 - 然后定义一个
async
函数readAndProcessFile
,在这个函数内部,使用await
等待readFileAsync
的Promise
被解决(resolved),获取文件内容后再进行处理。如果在await
操作过程中Promise
被拒绝(rejected),则会进入catch
块处理错误。这样就以一种类似同步代码的方式实现了异步操作,简化了异步代码的编写和错误处理。