• JavaScript中的Promise


    JavaScript中的Promise是一种异步编程的解决方案,它可以避免回调地狱,使代码更加简洁和易于维护。本文将详细介绍Promise的API及其使用案例,并附有代码注释。

    Promise的API

    Promise构造函数

    Promise构造函数用于创建一个Promise实例,它接受一个函数作为参数,该函数有两个参数resolve和reject,分别表示异步操作成功和失败时的回调函数。

    const promise = new Promise((resolve, reject) => {
      // 异步操作
      if (/* 异步操作成功 */) {
        resolve(value); // 调用resolve函数
      } else {
        reject(error); // 调用reject函数
      }
    });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    Promise.prototype.then()

    Promise.prototype.then()方法用于指定异步操作成功时的回调函数,它接受一个参数onResolved,表示成功时的回调函数。

    promise.then(onResolved);
    
    • 1

    Promise.prototype.catch()

    Promise.prototype.catch()方法用于指定异步操作失败时的回调函数,它接受一个参数onRejected,表示失败时的回调函数。

    promise.catch(onRejected);
    
    • 1

    Promise.all()

    Promise.all()方法用于将多个Promise实例包装成一个新的Promise实例,当所有Promise实例都成功时,返回的Promise实例才会成功,否则返回的Promise实例失败。

    const promises = [promise1, promise2, promise3];
    Promise.all(promises)
      .then(values => {
        // 所有Promise实例都成功时执行的回调函数
      })
      .catch(error => {
        // 任一Promise实例失败时执行的回调函数
      });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    Promise.race()

    Promise.race()方法用于将多个Promise实例包装成一个新的Promise实例,当任一Promise实例成功或失败时,返回的Promise实例就会成功或失败。

    const promises = [promise1, promise2, promise3];
    Promise.race(promises)
      .then(value => {
        // 任一Promise实例成功时执行的回调函数
      })
      .catch(error => {
        // 任一Promise实例失败时执行的回调函数
      });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    Promise的使用案例

    下面是一个使用Promise的例子,它通过Promise实现了异步加载图片,并在加载完成后执行回调函数。

    function loadImageAsync(url) {
      return new Promise((resolve, reject) => {
        const image = new Image();
        image.onload = () => {
          resolve(image);
        };
        image.onerror = () => {
          reject(new Error('Could not load image at ' + url));
        };
        image.src = url;
      });
    }
    
    loadImageAsync('https://example.com/image.jpg')
      .then(image => {
        console.log('Image loaded:', image);
      })
      .catch(error => {
        console.error('Error loading image:', error);
      });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    在上面的例子中,loadImageAsync函数返回一个Promise实例,它包装了异步加载图片的过程。当图片成功加载时,Promise实例调用resolve函数,将加载后的图片对象传递给then方法的回调函数;当图片加载失败时,Promise实例调用reject函数,将错误对象传递给catch方法的回调函数。

    结语

    Promise是JavaScript中一种重要的异步编程解决方案,它通过使用简单的API,使异步编程变得更加简单和可维护。在实际开发中,我们可以根据具体需求,使用Promise的不同API,来实现各种复杂的异步操作。

  • 相关阅读:
    耗资百万的TPS第三人称射击『赛博朋克』游戏,免费开源啦!下载攻略奉上
    DG failover TNS description list ,ADG service name 不一样的tnsnames.ora的设置
    JavaFX、贷款服务器
    leetcode264 丑数 II
    《Web安全基础》08. 漏洞发现
    RxJS 实做: 自定义 operator - switchMapBy
    407. 接雨水 II
    php网盘程序使用php网盘程序
    效果最大化的所需素材
    三步教你快速入手一个新产品的测试
  • 原文地址:https://blog.csdn.net/weiyi47/article/details/134089557