首页 > 其他分享 >自定义实现promise.all

自定义实现promise.all

时间:2023-09-21 16:56:05浏览次数:31  
标签:自定义 checkPromise 实现 promiseIndex promiseArray results Promise 数组 promise

Promise.all是一个在JavaScript中常见的函数,用于处理一个Promise数组。当数组中的所有Promise都完成时,Promise.all将返回一个新的Promise,该Promise将解析为包含所有输入Promise解析值的数组。如果任何一个Promise失败,返回的Promise将立即被标记为失败,并且该数组将只包含失败的Promise的错误。

function myPromiseAll(promiseArray) {  
    return new Promise((resolve, reject) => {  
        let results = [];  
  
        let promiseIndex = 0;  
        function checkPromise() {  
            if (promiseIndex >= promiseArray.length) {  
                // 所有Promise都已完成,可以解析结果并解决  
                resolve(results);  
                return;  
            }  
  
            let currentPromise = promiseArray[promiseIndex];  
            currentPromise.then(  
                (result) => {  
                    results[promiseIndex] = result;  
                    promiseIndex++;  
                    checkPromise();  
                },  
                (error) => {  
                    reject(error);  
                }  
            );  
        }  
  
        checkPromise();  
    });  
}

这个函数接受一个Promise数组作为输入,并返回一个新的Promise。这个新的Promise将在所有输入Promise都完成时解析,或者在任何一个Promise失败时标记为失败。这个函数使用一个数组来跟踪每个Promise的结果,并使用一个索引来跟踪我们还需要多少个Promise才能完成。然后,我们递归地调用checkPromise函数,直到所有的Promise都完成。

标签:自定义,checkPromise,实现,promiseIndex,promiseArray,results,Promise,数组,promise
From: https://www.cnblogs.com/crazy-rock/p/17720375.html

相关文章

  • JavaScript实现数组对象去重
    有多种实现方式:一、使用 Set 对象:1Array.from(new Set(array))该方法会先创建一个 Set 对象,然后再使用 Array.from 方法将 Set 对象转换为数组,因为 Set 对象不允许有重复的元素,所以这样可以实现去重的效果。但是,如果数组中的元素是对象,Set 对......
  • 手写promise核心代码(一)
     classmyPromise{staticPENDING='pending'staticREJECT='reject'staticRESOLVE='resolve';constructor(executor){this.value=nullthis.status=myPromise.PENDINGtry{executor(this.resolve1.bind......
  • java通过连接ssh来实现postgres数据库的数据备份
    引入依赖<dependency><groupId>com.jcraft</groupId><artifactId>jsch</artifactId><version>0.1.54</version><scope>compile</scope></dependency&g......
  • FreeMarker网站静态化的实现
    由于网站首页上板块划分很多,不同板块的数据库查询方式不同,首页内容量巨大,如果按照一般的动态jsp页面的话那么数据库查询将是巨大的开销,会导致首页访问速度的下降。于是考虑将这个首页全部静态化。 整个网站采用struts2+spring+hibernate+freemarker+urlrewrite完成。首页......
  • 使用maskbarcode.jar实现一维条形码
    1.在项目的WEB-INF下的lib目录添加maskbarcode.jar2.配置web.xml文件,代码如下:1.<?xmlversion="1.0"encoding="UTF-8"?>2.<web-appversion="2.5"3.xmlns="http://java.sun.com/xml/ns/javaee"4.xmlns:xsi="h......
  • PowerDotNet平台化软件架构设计与实现系列(16):财务平台
    不同行业基本都会有自己独特的业务,甚至同行的不同企业之间的业务逻辑也会相差千里,只有最大程度抽象出通用性、标准性和普适性的系统才能够成为平台系统,平台系统开发的成本和难度可想而知。个人深度参与或独立设计开发过的公共服务型平台系统,主要包括基础数据平台、支付平台、财务......
  • JAVA应用XFire框架来实现WebServie的大文件传输功能之二(上传)
    xml文件:<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="http://xfire.codehaus.org/config/1.0"><service><name>HelloWorldService</name><namespace>http://localhost:8090......
  • JAVA应用XFire框架来实现WebServie的大文件传输功能之一(下载)
    下面是文件下载功能,可以实现大文件的断点续传,其原理是把服务端先把文件内容Byte[]转换成Base64编码字符串返回给客户端,然后客户端接收到后再把该Base64编码过的字符串转换成Byte[],最后写入文件。     至于断点续传的设计很简单,服务端留有一个定位参数,每次读取文件之前,都先定......
  • MySQL中row_number()的实现,查询记录排序行数
    MySQL中row_number()的实现,查询记录排序行数时间  2019-12-06标签 mysql row number 实现 查询 记录 排序 行数 栏目 MySQL 繁體版原文   https://my.oschina.net/u/3087202/blog/1842169  在MySQL8.0之前是有没row_number()这个窗口函数的,若是想实......
  • 直播平台开发,使用swiper实现轮播效果
    直播平台开发,使用swiper实现轮播效果第一步:安装swiper`  [email protected] //安装swiper ​第二步:在main.js中引入  //引入swiper   import'swiper/dist/css/swiper.min.css'   import'swiper/dist/js/swiper.min'  第三步......