关于异步 Promise的一些方法all, race,finally,any,map, reduce, mapSeries, each 等方法

如果你不相信努力和时光,那么成果就会是第一个选择辜负你的。不要去否定你自己的过去,也不要用你的过去牵扯你现在的努力和对未来的展望。不是因为拥有希望你才去努力,而是去努力了,你才有可能看到希望的光芒。关于异步 Promise的一些方法all, race,finally,any,map, reduce, mapSeries, each 等方法,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

异步 Promise 是现代 JavaScript 开发中不可或缺的一部分。它提供了一种优雅且可读性强的方式来处理异步代码,在回调代码和将要执行这个任务的异步代码之间提供一种可靠的中间机制来管理回调,避免了回调地狱。最重要的一点,它对只用回调的异步方法给予了重大改进,即提供了有序性,可预测性和可靠性。以下是关于 Promise 的一些常用方法的简要介绍。

  1. Promise.all
    Promise.all 方法接收一个 Promise 对象数组,返回一个 Promise,当所有 Promise都被解决(fulfilled)时,返回的 Promise 才会被解决。如果有任何一个 Promise 被拒绝(rejected),返回的Promise 也会被拒绝。

    function all(promises) {
      return new Promise((resolve, reject) => {
        let result = [];
        let count = promises.length;
        promises.forEach((p, i) => {
          Promise.resolve(p)
            .then(res => {
              result[i] = res;
              count--;
              if (count === 0) resolve(result);
            })
            .catch(err => {
              reject(err);
            });
        });
      });
    }
    

    在上面代码中,Promise.resolve( p ) 的作用是将传入的值p转换成一个Promise对象。如果p本身就是一个Promise对象,这个Promise对象会被原样返回。如果p是一个普通值,那么Promise.resolve( p )会返回一个Promise对象,这个Promise对象的状态为fulfilled,并且将p的值作为它的返回值。

  2. Promise.race
    Promise.race 方法接收一个 Promise 对象数组,返回一个 Promise,当 Promise数组中的任何一个 Promise 被解决或被拒绝时,返回的 Promise 就会被解决或被拒绝。

    function race(promises) {
      return new Promise((resolve, reject) => {
        promises.forEach(p => {
          Promise.resolve(p)
            .then(res => {
              resolve(res);
            })
            .catch(err => {
              reject(err);
            });
        });
      });
    }
    
  3. Promise.any
    Promise.any 方法接收一个 Promise 对象数组,返回一个 Promise,当 Promise数组中的任何一个 Promise 被解决时,返回的 Promise 就会被解决。如果所有 Promise 都被拒绝,返回的Promise 就会被拒绝,其拒绝原因是一个 AggregateError 对象,它包含了所有 Promise 的拒绝原因。

    function any(promises) {
      return new Promise((resolve, reject) => {
        let count = promises.length;
        let errors = [];
        promises.forEach(p => {
          Promise.resolve(p)
            .then(res => {
              resolve(res);
            })
            .catch(err => {
              count--;
              errors.push(err);
              if (count === 0) reject(errors);
            });
        });
      });
    }
    
  4. Promise.finally
    Promise.finally 方法用于在 Promise被解决或被拒绝时执行一些操作,它的回调函数不接收任何参数,也不改变 Promise 的状态,只是返回原始的 Promise对象。通常用于清理工作,如关闭文件或释放资源等。

  5. Promise.map
    Promise.map 方法接收一个数组和一个函数,返回一个 Promise,该 Promise解决后返回一个新的数组,该数组由原始数组的每个元素经过函数处理后的结果组成。函数可以是同步或异步的,并且可以返回 Promise。如果任何一个元素的处理过程中发生了错误,Promise.map 方法会立即返回一个被拒绝的 Promise 对象,其原因是第一个被拒绝的 Promise 对象的原因。

  6. Promise.reduce
    Promise.reduce 方法接收一个数组、一个函数和一个可选的初始值,返回一个 Promise,该Promise 解决后返回一个累积值,该值是通过对原始数组的每个元素应用函数而得到的。函数可以是同步或异步的,并且可以返回Promise。

  7. Promise.mapSeries
    Promise.mapSeries 方法接收一个数组和一个函数,返回一个 Promise该Promise 解决后返回一个新的数组,该数组由原始数组的每个元素经过函数处理后的结果组成。函数必须是异步的,它必须返回一个Promise。和Promise.map的不同之处在于 Promise.map 中的处理函数是并发执行的,而 Promise.mapSeries 中的处理函数是按照数组元素的顺序一个接一个执行的。

  8. Promise.each
    Promise.each 方法接收一个数组和一个函数,返回一个 Promise,该Promise 解决后返回undefined。函数必须是异步的,它必须返回一个 Promise。在函数处理完数组中的每个元素后,Promise 解决。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/199228.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之家——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!