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

【JS】手写Promise.all

时间:2024-04-04 22:58:23浏览次数:25  
标签:resolve 迭代 JS length Promise result let 手写

注意

Promise.myAll = function (proms) {
  let res, rej // 存储状态
  const p = new Promise((resolve, reject) => {
    res = resolve
    rej = reject
  })
  const result = []
  // 参数为空的不可迭代对象,不能直接判断.length,因为只要是可迭代对象都可以用.length
  let length = 0 // 记录参数长度
  let fullFilledCount = 0 // 记录Promise完成的次数
  for (const prom of proms) {
    let index = length // 记录参数的下标,确保返回值的顺序
    length++
    // 确保每一项都是Promise,以防用户传错
    Promise.resolve(prom).then(
      data => {
        // 1. 成功后,按照顺序添加到数组中
        result[index] = data
        console.log(result, "******");
        fullFilledCount++ // 完成数+1
        // 2. 如果是最后一个Promise,返回结果
        if (fullFilledCount === length) {
          res(result)
        }
      },
      rej // 任意失败时,直接reject
    )
  }
  if (length === 0) { res(result) }
  return p
}

标签:resolve,迭代,JS,length,Promise,result,let,手写
From: https://blog.csdn.net/owo_ovo/article/details/137120501

相关文章

  • nodejs中使用Nunjucks 模板引擎
    要在Koa2中使用Nunjucks模板引擎,你需要进行一些额外的设置。以下是一个示例代码,演示了如何在Koa2中集成Nunjucks:首先,确保已经安装了Koa和Nunjucks:npminstallkoanunjucks然后,在项目中创建一个名为app.js的文件,并添加以下代码:constKoa=require('koa');con......
  • 手写防抖节流
    防抖持续频繁触发某个机制,则需要等待指定的时间再执行。/**手写防抖*用法:函数在n秒后再执行,如果n秒内被触发,重新计时,保证最后一次触发事件n秒后才执行。*思路:*1、保存一个变量timer*2、返回一个闭包函数函数内判断一下timer是否有值*2.1、如果有......
  • (谷歌浏览器)如何在vscode中搭建vue.js devtools的环境
    搭建过程中明明所有操作步骤都做了,却还是出现下面这种情况: 以下是正确的搭建操作步骤:根据一下图片在vscode中创建文件夹;将以下代码写入; <scripttype="text/javascript"src="../js/vue.js"></script>接下来就是我们需要点击https://vuejs.zcopy.site/,进入到网站后,......
  • 基于ssm网上医院预约挂号系统+jsp论文
    摘要如今的信息时代,对信息的共享性,信息的流通性有着较高要求,因此传统管理方式就不适合。为了让医院预约挂号信息的管理模式进行升级,也为了更好的维护医院预约挂号信息,网上医院预约挂号系统的开发运用就显得很有必要。并且通过开发网上医院预约挂号系统,不仅可以让所学的SSM......
  • 解决 WebStorm 粘贴 JSX 时自动将 class 改为 className 的问题
    参考:解决复制时class自动改为className的问题将该选项取消勾选:File=>Settings=>Editor=>General=>SmartKeys=>JavaScript=>ConvertHTMLwhenpastingintoJSXfiles。......
  • node.js启动文件服务器 并自动查询index.html等默认文件
    方法1'usestrict';consthttp=require('http'),fs=require('fs'),url=require('url'),path=require('path');//从命令行参数获取root目录,默认是当前目录varroot=path.resolve(process.argv[2]||'.&......
  • JS实现简单的Vue,知乎上已获万赞
    compile解析domlassVue{constructor(options={}){…}proxyData(key){…}observer(data){…}compile(el){varnodes=el.childNodes;for(leti=0;i<nodes.length;i++){constnode=nodes[i];if(node.nodeType===3){vartext=node.textCon......
  • JS Graph (图-数据结构)
    Code:/***基于邻接表实现的无向图*@class*/classGraphAdjList{/***@type{Map<any,any[]>}*/adjList;/***构造函数*@constructor*@param{[any,any][]}edges*/constructor(edges){this.a......
  • node.js启动http服务
    新建一个文件server.js,代码如下//导入http模块consthttp=require('http');//定义主机和端口号consthostname='127.0.0.1';constport=3000;//创建HTTP服务器constserver=http.createServer((req,res)=>{//获得HTTP请求的method和url:console.......
  • 30 天精通 RxJS (08):简易拖拉实作 - take, first, takeUntil, concatAll
    我们今天要接着讲take,first,takeUntil,concatAll这四个operators,并且实作一个简易的拖拉功能。Operatorstaketake是一个很简单的operator,顾名思义就是取前几个元素后就结束,范例如下varsource=Rx.Observable.interval(1000)varexample=source.take(3)example.......