MST

星途 面试题库

面试题:JavaScript 中 Promise 的基本用法

请简述 JavaScript 中 Promise 的三种状态,并编写一个简单的 Promise 示例,实现异步操作的链式调用,比如模拟异步读取文件,然后对文件内容进行处理。
11.2万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

Promise 的三种状态

  1. Pending(进行中):初始状态,既不是成功,也不是失败状态。
  2. Fulfilled(已成功):意味着操作成功完成,Promise 会有一个 resolved 的值。
  3. Rejected(已失败):意味着操作失败,Promise 会有一个 rejection 的原因。

简单 Promise 示例实现异步操作链式调用

function readFileAsync(filePath) {
    return new Promise((resolve, reject) => {
        // 模拟异步读取文件
        setTimeout(() => {
            const success = true;
            if (success) {
                const fileContent = '这是文件内容';
                resolve(fileContent);
            } else {
                reject(new Error('读取文件失败'));
            }
        }, 1000);
    });
}

function processFileContent(content) {
    return new Promise((resolve, reject) => {
        // 模拟对文件内容进行处理
        setTimeout(() => {
            const processedContent = content.toUpperCase();
            resolve(processedContent);
        }, 1000);
    });
}

readFileAsync('example.txt')
   .then((fileContent) => {
        return processFileContent(fileContent);
    })
   .then((processedContent) => {
        console.log(processedContent);
    })
   .catch((error) => {
        console.error(error.message);
    });

在上述代码中:

  1. readFileAsync 函数返回一个 Promise,模拟异步读取文件操作,成功时 resolve 文件内容,失败时 reject 错误。
  2. processFileContent 函数同样返回一个 Promise,模拟对文件内容的处理,成功时 resolve 处理后的内容。
  3. 通过 .then 方法进行链式调用,当 readFileAsync 成功时,会将文件内容传递给 processFileContent 进行处理,最后打印处理后的内容。如果任何一个 Promise 被 reject,则通过 .catch 捕获错误并打印错误信息。