前端学习:Promise的用法介绍

  1. Promise 基本概念

    • Promise 是 JavaScript 中的异步编程解决方案。它代表一个异步操作的最终完成(或失败)及其结果值。
    • Promise 有三种状态:
      • pending(进行中):初始状态,既不是成功,也不是失败。
      • fulfilled(已成功):异步操作成功完成。
      • rejected(已失败):异步操作失败。
  2. Promise 的基本用法

    • 创建 Promise

      • 通过构造函数创建一个新的 Promise 对象。构造函数接收一个执行器函数作为参数,执行器函数有两个参数,分别是 resolve 和 reject。这两个函数用于改变 Promise 的状态。

      • 例如:

        const myPromise = new Promise((resolve, reject) => {
            // 异步操作模拟
            setTimeout(() => {
                const isSuccess = true;
                if (isSuccess) {
                    resolve('操作成功'); // 改变状态为fulfilled,传递成功数据
                } else {
                    reject('操作失败'); // 改变状态为rejected,传递失败数据
                }
            }, 1000);
        });
        
    • 使用 .then() 方法处理成功情况

      • .then() 方法用于指定异步操作成功时的回调函数。它可以接收一个函数作为参数,当 Promise 的状态变为 fulfilled 时,这个函数会被调用,并且可以获取到 resolve 传递的值。

      • 例如:

        myPromise.then((data) => {
            console.log('成功回调:', data); // 输出 "成功回调: 操作成功"
        });
        
    • 使用 .catch() 方法处理失败情况

      • .catch() 方法用于指定异步操作失败时的回调函数。当 Promise 的状态变为 rejected 时,这个函数会被调用,并且可以获取到 reject 传递的值。

      • 例如:

        myPromise.catch((error) => {
            console.log('失败回调:', error);
        });
        
    • 使用 .finally() 方法处理完成后的操作(可选)

      • .finally() 方法用于指定不管 Promise 最终是成功还是失败,都会执行的回调函数。通常用于清理操作,如关闭加载动画等。

      • 例如:

        myPromise
            .then((data) => {
                console.log('成功回调:', data);
            })
            .catch((error) => {
                console.log('失败回调:', error);
            })
            .finally(() => {
                console.log('操作完成,不管成功还是失败都会执行');
            });
        
    • Promise 链式调用

      • .then() 方法会返回一个新的 Promise 对象,这使得可以进行链式调用,用于处理多个依赖的异步操作。

      • 例如:

        myPromise
            .then((data) => {
                console.log('第一个成功回调:', data);
                // 返回一个新的 Promise 或者直接返回值
                return new Promise((resolve) => {
                    resolve('第二个成功回调数据');
                });
            })
            .then((newData) => {
                console.log('第二个成功回调:', newData); // 输出 "第二个成功回调: 第二个成功回调数据"
            })
            .catch((error) => {
                console.log('失败回调:', error);
            });
        
  3. 读取 data 值的方式

    • 通常,Promise 的.then()方法的第一个参数就是一个用于读取 resolve 传递的数据的函数。这个函数的参数就是 resolve 函数传递的值(data 值),在.then()的回调函数中可以直接使用这个参数来获取和处理 data 值。

    • 以获取 API 数据为例:

      // 模拟 API 请求返回 Promise
      function fetchData() {
          return new Promise((resolve, reject) => {
              // 模拟网络请求
              setTimeout(() => {
                  const data = { name: '张三', age: 20 };
                  resolve(data);
              }, 2000);
          });
      }
      
      fetchData().then((data) => {
          console.log(data); // 读取 data 值,输出 {name: "张三", age: 20}
          console.log(data.name); // 输出 "张三"
          console.log(data.age); // 输出 20
      });
      
      • 在这个例子中,fetchData() 返回一个 Promise。在.then()的回调函数中,data参数就是 resolve 函数传递的数据对象,我们可以通过 data 来读取其中的属性,如 data.namedata.age
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值