首页 > 其他分享 >封装一个Promise.all 的函数

封装一个Promise.all 的函数

时间:2024-06-09 21:11:54浏览次数:14  
标签:resolve 封装 函数 Promise 数组 reject const

 // 1. 准备三个异步函数
    const promise1 = Promise.resolve('prom11ise1');
    const promise2 = new Promise(function (resolve, reject) {
        setTimeout(resolve, 2000, 'promise2');
    });
    const promise3 = new Promise(function (resolve, reject) {
        setTimeout(resolve, 1000, 'promise3');
    });

    // 2. 封装PromiseAll函数 返回的结果是一个new Promise 信息是一个数组 data
    const PromiseAll = (iterator) => {
        // 对传入的数据进行浅拷贝,确保有遍历器 - 类数组转换真数组
        const promises = Array.from(iterator);
        const len = promises.length; // 长度 3 
        let index = 0; // 每次执行成功+1,当等于长度时,说明所有数据都返回,则可以resolve
        let data = []; // 用来存放返回的数据数组
        return new Promise((resolve, reject) => {
            // 遍历逐个执行 Promise
            for (let i in promises) {
            promises[i]
                .then((res) => {
                data[i] = res;  // 如果成功了就保存 message
                // 先判断 是否全部都执行成功了 成功执行 resolve 并把 data 数组返回
                // 如果没有全部执行 index+1
                if (++index === len) { 
                    resolve(data);
                }
                })
                .catch((err) => {
                    reject(err);  // 只要有一次error直接返回 reject
                });
            }
        });
    };

    // 3. 调用
    PromiseAll([promise1, promise2, promise3]).then(function(values) {
        console.log(values); // 结果: ["prom11ise1", "promise2","promise3"]
    });

Promise是一种抽象异步处理对象,参数值为一个回调函数。该回调函数又使用两个参数,参数值分别为两个回调函数(resolve,reject),如果执行成功则调用resolve回调函数,否则执行reject回调函数。

Promise.all介绍:promise.all(promises),promises参数是一个数组(iterable类型),数组内的元素都是promise对象,当里面的每一个promise对象都返回成功resolve的回调函数,它则返回包含数组内每一个元素信息的成功回调函数(resolve),当数组内有一个或以上promise对象返回失败的回调函数,则最后也会返回调用失败的回调函数(reject)。

ps:Array,Map,Set都属于ES6的iterable类型。

标签:resolve,封装,函数,Promise,数组,reject,const
From: https://www.cnblogs.com/zhulongxu/p/18240007

相关文章

  • Linux c fread/fseek 函数
    函数:freadsize_tfread(void*ptr,size_tsize,size_tnmemb,FILE*stream);参数说明:参数buffer指向要读取的数组中首个对象的指针size每个对象的大小(单位是字节)count要读取的对象个数stream输入流函数:fseekintfseek(FILE*stream,longintoffse......
  • 1奇函数偶函数
    文章目录自变量有理化奇偶性周期性初等函数自变量自变量是x,这个还挺奇怪,记住就好y=f(e......
  • mm-qcamera-daemon主函数分析
    目录main函数核心main函数核心  main函数的主要任务包含在一个do{}while(1)循环中.while循环中主要是监听文件描述符,故mai函数是由文件的读写来进行驱动的。  所有的文件描述符被封装成结构体read_fd_info_t.其定义如下:/**read_fd_info_t *@type--ei......
  • C++ primer plus习题及解析第八章(函数探幽)
    题目:8.11.编写通常接受一个参数(字符串的地址),并打印该字符串的函数。然而,如果提供了第二个参数(int类型),且该参数不为0,则该函数打印字符串的次数将为该函数被调用的次数(注意,字符串的打印次数不等于第二个参数的值而等于函数被调用的次数)。是的,这是一个非常可笑的函数,但......
  • 一篇文章让你让你对python函数的掌握由基础到高级
    python中函数由低级到高级一函数基础1.1函数简介functioninputprint内置函数——》可以直接使用可复用性非常差函数就是存代码的总结函数的优点:1.遇到重复功能的时候,直接调用即可,减少代码量2.提升代码的结构性,分工明确,提高代码的可读性3.遇到扩展功能的时候,修......
  • jquery 封装 bootstrap table
    简易代码如下:JS如下:$.fn.extend({table:function(opts){consttableConfig={mode:'debug'}consttablePreset={limit:10,}//TheinstanceconstTable={......
  • sqli-labs 靶场闯关基础准备、学习步骤、SQL注入类型,常用基本函数、获取数据库元数据
    Sqli-labs的主要作用是帮助用户学习如何识别和利用不同类型的SQL注入漏洞,并了解如何修复和防范这些漏洞。它提供了多个不同的漏洞场景,每个场景都代表了一个特定类型的SQL注入漏洞。用户可以通过攻击这些场景来学习和实践漏洞利用技术,以及相应的修复和防御措施。Sqli-labs......
  • 一起学习javascript-进阶版函数(1)
    <script>  //举个例子 functionsum(x){    returnx+1;  }    functionadd(a,b,f){    varc=f(a)+f(b)    console.log("c的值为:"+c);  }  //给add函数传参  add(3,6,sum);// 这里的f相当于为//......
  • 一起学习javascript-函数(2)
    <script>  //变量作用域与解构赋值  functionf1(y){  varx=1;  x=x+2;  console.log(x+y);  console.log(x);  //因为变量x在函数f1中申明,在这里属于局部变量,所以x只能在f1中访问,f1执行完,x就销毁了}f1(2);//为了更直观一点,调用......
  • 哈希桶封装unordered_map、unordered_set
    哈希桶源代码我们将由下列的哈希桶来模拟封装STL库中的unordered_map和unordered_set注意:为了实现封装unordered_map和unordered_set,我们需要对下列源码进行优化。//哈希桶namespacehashbucket{template<classK,classV>structHashNode{HashNo......