首页 > 其他分享 >Promise.all()

Promise.all()

时间:2024-08-21 21:15:55浏览次数:3  
标签:functions resolve res resolvedCount Promise catch

Promise.all() 是 JavaScript 中的一个内置方法,它接受一个 Promise 可迭代对象,并返回一个新的 Promise。这个新 Promise 仅在可迭代对象中的所有 Promise 都已成功时才会被满足,或者在可迭代对象中的任何 Promise 被拒绝时立即被拒绝。Promise.all()Promise 的值是可迭代对象中已满足的 Promise 的值的数组,按照可迭代对象中 Promise 的顺序排列。

  1. promiseAll 函数返回一个新 Promise

  2. 如果输入数组为空,立即用一个空数组解析它并返回。

  3. 初始化一个数组 res 以保存结果,最初填充为 null

  4. 初始化一个 resolvedCount 变量,用于跟踪已解析的 Promise 数。

  5. 迭代 Promise 返回函数的数组。对于每个返回 Promise 的函数:

    1. async/await 版本中,等待 Promise。在解析时,将结果放入 res 数组中的相应位置并增加 resolvedCount。如果引发错误,立即用错误拒绝 Promise
    2. then/catch 版本中,附加一个 then 子句和一个 catch 子句。在解析时,then 子句将结果放入 res 数组中并增加 resolvedCountcatch 子句用错误拒绝 Promise

async/await 写法

const promiseAll = function(functions) {
    return new Promise(function(resolve, reject) {
        if (functions.length === 0) {
            return resolve([])
        }

        const res = new Array(functions.length).fill(null)

        let resolvedCount = 0

        functions.forEach(async function(el,index) {
            try{
                res[index] = await el()
                resolvedCount++
                if (resolvedCount === functions.length) {
                    resolve(res)
                }
            } catch (error) {
                reject(error)
            }
        })
    })
}

then/catch 写法

const promiseAll = function (functions) {
    return new Promise((resolve, reject) => {
        if (functions.length === 0) {
            return resolve([])
        }

        const res = new Array(functions.length).fill(null)

        let resolvedCount = 0

        functions.forEach((el,index) => {
            el().then((itemResult) => {
                res[index] = itemResult
                resolvedCount++
                if (resolvedCount === functions.length) {
                    resolve(res)
                }
            }).catch((err) => {
                return reject(err)
            })
        })
    })
}

标签:functions,resolve,res,resolvedCount,Promise,catch
From: https://www.cnblogs.com/xxaxf/p/18372566

相关文章

  • 【前端】使用Promise达到循环调用接口的效果
    Promise.all()要使用Promise.all调用同一个异步方法多次并将所有结果收集起来,你可以创建一个包含该方法调用的Promise数组,然后将这个数组传递给Promise.all。示例:假设你有一个异步方法fetchData(id),你想针对一组ID调用它并等待所有结果。asyncfunctionfetchData(id){......
  • 手写Promise
    实现功能如下:Promise构造函数promise实例then方法pomise实例catch方法promise实例finally方法Promise静态resolve方法Promise静态reject方法Promise静态all方法备注:参照渡一教育视频代码:1constPending='pending';2constFullFiled='fulfilled';3con......
  • lua版promise实现 - 结束
    相比V1版本这边做了以下修改:1)函数命名尽量与js版保持一致,js中的then在这边叫Next(因为then是lua的关键字)2)m_DoNextObj这边变成了一个列表,这样改动的结果就是:之前对象间会组成单向链表;这边是一个单向的树。3)m_DoNextObj.run函数这边改成了m_OnFulfilled和m_OnRejected函数(......
  • lua版promise实现3 - 条件判断例子
    针对:先加载资源A,加载完A再加载资源B,加载完B再加载资源C。现在加需求了,如果加载资源A的时间不超过3s,那说明当前设备性能不错,会额外再加载高品质资源A2,A3,然后再加载B。 localobj1=PromiseV1.new()localtime1=os.time()AsyncLoadRes("ResA",function(textA)obj1:S......
  • js异步之Promise使用
    Promise是异步编程的一种解决方案,是一个对象,可以获取异步操作的消息,大大改善了异步编程的困难,避免了回调地狱,比传统的解决方案回调函数和事件更合理和更强大。从语法上讲,Promise是一个对象,它可以获取异步操作的消息。提供了一个统一的API,各种异步操作都可以用同样的方法进行处理......
  • lua版promise实现 - 从异步回调多层嵌套开始
    异步回调代码,很容易就写出下面这样的不断嵌套的代码。如果还夹杂着各种逻辑的话,可读性会很差,还容易出错。AsyncLoadRes("ResA",function(textA)print("ResAloadfinish")AsyncLoadRes("ResB",function(textB)print("ResBloadfinish")AsyncLoad......
  • JS Promise 一分钟带你深度理解
    JSPromise一分钟带你深度理解文章目录JSPromise一分钟带你深度理解一、什么是Promise?二、为什么使用Promise?三、基础知识四、创建Promise五、Promise使用1、链式调用2、顺序执行3、处理多个Promise4、错误处理六、高级用法七、最佳实践八......
  • AJAX - 利用XML和Promise封装简易版axios,了解axios底层原理
     AJAX原理-XMLHttpRequest定义:XMLHttpRequest(XHR)对象用于与服务器交互。通过XMLHttpRequest可以在不刷新页面的情况下请求特定URL,获取数据。这允许网页在不影响用户操作的情况下,更新页面的局部内容。XMLHttpRequest 在 AJAX 编程中被大量使用。关系:axios内部采用......
  • promise.catch
    在JavaScript中,如果你在Promise链中使用了catch,并且catch捕获到一个异常后,后面的then仍然会被执行,但有一些具体的行为取决于catch中的操作。1、当promise.catch捕获到异常并返回一个值,那么后续的then会继续执行,并且接收catch中返回的值作为输入。如:newPromise((......
  • JavaScript中的异步编程:Promise、async 和 await
    JavaScript中的异步编程:Promise、async和await在JavaScript中,Promise、async和await是处理异步操作的关键技术。这些技术允许开发者以更清晰、更可维护的方式编写异步代码,特别是在面对复杂的异步逻辑时。下面我会详细解释每个概念并展示它们是如何协同工作的。Prom......