首页 > 其他分享 >【JS基础】手写Promise.all

【JS基础】手写Promise.all

时间:2023-07-03 20:35:22浏览次数:29  
标签:resolve const promiseResult err JS Promise reject 手写

我还以为是先手写promise,再实现all方法呢,没想到这么简单。。。

/**
 * 手写 promise.all
 */
function promiseAll(args) {
    return new Promise((resolve, reject) => {
        const promiseResult = []
        let iteratorIndex = 0
        let fullCount = 0
        for(const item of args) {
            let resultIndex = iteratorIndex;
            iteratorIndex += 1
            Promise.resolve(item).then(res => {
                promiseResult[resultIndex] = res
                fullCount += 1
                if(fullCount === args.length) {
                    resolve(promiseResult)
                }
            }).catch(err => {
                reject(err)
            })
        }

        if(iteratorIndex === 0) {
            resolve(promiseResult)
        }
    })
}

if(!Promise.all) {
    Promise.all = promiseAll
}


const p1 = new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve(1)
    }, 1000)
})


const p2 = new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve(2)
    }, 2000)
})

const p3 = new Promise((resolve, reject) => {
    setTimeout(() => {
        // resolve(3)
        reject(3)
    }, 3000)
})

promiseAll([p1, p2, p3]).then(res => {
    console.log(res)
}).catch(err => {
    console.error('err: ', err)
}).finally(() => {
    console.log('finally')
})

 

标签:resolve,const,promiseResult,err,JS,Promise,reject,手写
From: https://www.cnblogs.com/zjy4fun/p/17523939.html

相关文章

  • Jsp
          为什么使用jspJsp定义:动态的网页技术 Javaserverpages()java服务器端页面技术Jsp的缘由:可以实现交互功能(客户端和服务器端产生请求和响应);可以实现HTML静态页面无法实现的动态更新数据功能面试题:bs和cs的区别B/Sbrowser server浏览器  服务器......
  • 【JS错误总结】promise.then 如果没有被 resolve,不会立即执行,而是先执行宏任务,等待 pr
    setTimeout(()=>{console.log('setTimeout')},0)letpromise=newPromise((resolve,reject)=>{console.log('1')setTimeout(()=>{console.log('timeStart')resolve('success�......
  • js格式化货币方法
    ......
  • 关于Gin如何在multipart/form-data请求下解析JSON数组
    前言众所周知,在Gin下,如果只是在multipart/form-data请求下解析JSON对象到结构体的话就比较简单。但是如果是要解析JSON数组到对应请求结构体呢?正文举个例子:typeAddItemstruct{IDint`form:"-"` Images[]*multipart.FileHea......
  • js 实现斐波那契数列
    O2^N算法,常规写法,递归实现functionfib(n){if(n==0||n===1)return1;returnfib(n-1)+fib(n-2);};console.log(fib(3));//5console.log(fib(5));//8O(N)算法,动态规划,重叠子问题functionfibonacci(n){if(n<=1)returnn;......
  • ERROR in static/js/*** from UglifyJs Unexpected token: punc (,) [./~/@vant/poppe
     今天打包的时候发现这样的问题,解决方式:找到webpack.base.conf.js文件,加入下边的代码: {test:/\.mjs$/,loader:"babel-loader",include:[resolve("node_modules/@vant/popperjs/dist/index.esm.mjs")]},......
  • Delphi 通过WebBrowser调用JS方法
    Delphi通过WebBrowser调用JS时,为防止版本问题导致调用失败,需要在html中增加 <metahttp-equiv="X-UA-Compatible"content="IE=edge"/>示例html代码<!DOCTYPEhtml><html> <head> <metacharset="utf-8"> <metahttp-eq......
  • JS常见的事件
    onblur元素失去焦点时触发onblur事件会在对象失去焦点时发生。Onblur经常用于Javascript验证代码,一般用于表单输入框。提示:onblur相反事件为onfocus事件。onchange该事件在表单元素的内容改变时触发(<input>,<keygen>,<select>,和<textarea>)onchang......
  • jsjiami.v6加密混淆逆向分析介绍
    在互联网的不断发展的今天,网站的安全性越来越受到重视。JS混淆加密技术是一种常用的保护网站安全的手段。jsjiami.v6是一款常用的JS混淆加密工具,下面我们来详细了解一下。首先,我们来看一下一个使用jsjiami.v6进行混淆加密的案例代码:eval(function(p,a,c,k,e,r){e=function(c){re......
  • Jmeter之二_JSR223取样器,断言等添加失败的解决办法
    Jmeter之二_JSR223取样器,断言等添加失败的解决办法背景最近在学习jmeter但是发现在进行JSR223的相关取样器以及断言处理时出现了错误:java.lang.NoClassDefFoundError:Couldnotinitializeclassorg.apache.jmeter.assertions.JSR223AssertionBeanInfo错误信息如下图......