MST

星途 面试题库

面试题:Node.js 中 async/await 简化异步代码原理及应用

请阐述 Node.js 中 async/await 是如何简化异步代码的,并且通过一个简单示例说明,比如使用 `fs.readFile` 读取文件并处理其内容,要求示例代码中正确运用 async/await 语法。
29.0万 热度难度
前端开发Node.js

知识考点

AI 面试

面试题答案

一键面试

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.promisifyfs.readFile 这种基于回调的异步函数转换为返回 Promise 的函数 readFileAsync
  • 然后定义一个 async 函数 readAndProcessFile,在这个函数内部,使用 await 等待 readFileAsyncPromise 被解决(resolved),获取文件内容后再进行处理。如果在 await 操作过程中 Promise 被拒绝(rejected),则会进入 catch 块处理错误。这样就以一种类似同步代码的方式实现了异步操作,简化了异步代码的编写和错误处理。