MST

星途 面试题库

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

请阐述JavaScript中Promise的三种状态,并说明如何创建一个Promise实例,以及如何处理其成功和失败的情况。
14.4万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

Promise的三种状态

  1. Pending(进行中):初始状态,既不是成功,也不是失败状态。在这个状态下,Promise可能正在等待某个异步操作完成,比如网络请求、文件读取等。
  2. Fulfilled(已成功):意味着操作成功完成。当Promise进入这个状态时,会携带一个成功的值(resolved value),这个值可以是任何JavaScript数据类型,如字符串、数字、对象等。
  3. Rejected(已失败):表示操作失败。进入此状态时,Promise会携带一个表示失败原因的拒绝理由(reason),通常是一个错误对象,用于描述操作失败的原因。

创建Promise实例

在JavaScript中,可以使用new Promise()构造函数来创建一个Promise实例。Promise构造函数接受一个执行器函数作为参数,该执行器函数会立即被调用。执行器函数接受两个参数:resolvereject

const myPromise = new Promise((resolve, reject) => {
    // 异步操作,例如模拟一个延迟操作
    setTimeout(() => {
        const success = true;
        if (success) {
            resolve('操作成功');
        } else {
            reject(new Error('操作失败'));
        }
    }, 1000);
});

处理Promise成功和失败的情况

  1. 使用.then()方法:Promise实例上的.then()方法用于处理Promise成功(Fulfilled)和失败(Rejected)的情况。.then()方法接受两个回调函数作为参数,第一个回调函数用于处理成功的情况,第二个回调函数(可选)用于处理失败的情况。
myPromise
   .then((result) => {
        console.log(result); // 输出:操作成功
    })
   .catch((error) => {
        console.error(error.message); // 如果操作失败,输出错误信息
    });
  1. 使用.catch()方法.catch()方法是.then(null, rejectionHandler)的语法糖,专门用于捕获Promise被拒绝时的错误。这样可以使代码更简洁,特别是当只关注错误处理时。
myPromise
   .then((result) => {
        console.log(result); // 输出:操作成功
    })
   .catch((error) => {
        console.error(error.message); // 如果操作失败,输出错误信息
    });
  1. 链式调用.then()方法返回一个新的Promise,这使得可以进行链式调用,在成功处理后继续进行其他异步操作。
myPromise
   .then((result) => {
        console.log(result); // 输出:操作成功
        return '新的成功值';
    })
   .then((newResult) => {
        console.log(newResult); // 输出:新的成功值
    })
   .catch((error) => {
        console.error(error.message); // 如果操作失败,输出错误信息
    });