首页 > 其他分享 >关于批量按顺序下载(reduce+promise)

关于批量按顺序下载(reduce+promise)

时间:2023-11-04 11:35:03浏览次数:28  
标签:lastOneValue console log 批量 reduce resultList num promise const

参考文章

promise resolve reject
https://www.cnblogs.com/lunlunshiwo/p/8852984.html#4917337
reduce 按顺序调用
https://juejin.cn/post/7030625338065420302?searchId=202311041036275432B88F9F3A984960AA

注意点

  1. promise结果的使用
  2. reduce中的等待
  3. 结果数组的存储

运行截图

demo

// import React from 'react';
import { Button, Card } from 'antd';

const Test = () =>{
    // 准备回调的次数 模拟待发送的文件数量
const waitForUpdateList = [1,2,3];

let resultList=[]

 function simulateRequest (lastOneValue) {
// 这里传入的index - 1,是为了获取上一轮的返回值
console.log('lastOneValue',lastOneValue);
  const time = 500;
 
  return new Promise(function (resolve, reject) {
    setTimeout(()=>{
          let num = Math.ceil(Math.random() * 10)
    if (num > 5) {
      // 上一轮值存在 且是res 就绑定在这一轮
      const isLastIsRes = lastOneValue&&Object.keys(lastOneValue).includes('success')
      if(isLastIsRes){
        console.log('原本resolve的结果',num);
              resolve({success:num+lastOneValue.success})
      }else{
        resolve({success:num})

      }
    } else {
      reject({error:num})
    }
    },time)

  });
 
 } 
 
 // 循环顺序请求
 
 function cycleRequest () {
 
  console.log('新的一轮开始请求');
 
  // 一个请求周期,这边为了模拟方便长度为 10,实际情况可能是 10000 或 99999 这样的
   const arr = waitForUpdateList
 
  arr.reduce(async (last,_,index) => {
 let lastOneValue ;
   await last;
   if(index){
    lastOneValue = resultList[index-1] 
  }
   return simulateRequest(lastOneValue)
 
    .then((res) => {
 console.log('res',res);
resultList.push(res)

 
    }).catch(e=>{
console.log('e',e)
resultList.push(e)
    }).finally(()=>{
      // 达到边界 显示所有的promise结果
      // 为什么不用useState? 会有延迟 
      if (index + 1 === arr.length) {
        console.log('最终',resultList);

      }
  });
 
  }, undefined)
 
 }
 
 // 启动
 const everyThingDone=()=>{
  console.log('每轮重新开始,清空result');
  resultList=[];
cycleRequest();
}
 
  return <Card
    title="书语"
    bordered={false}
    style={{
      width: 300,
    }}
  >
    
<Button onClick={everyThingDone}>探索链式调用</Button>

  </Card>
}
export default Test;

标签:lastOneValue,console,log,批量,reduce,resultList,num,promise,const
From: https://www.cnblogs.com/lepanyou/p/17809091.html

相关文章

  • 批量获取www.kegg.jp的数据
    代码如下:importrequestsfrombs4importBeautifulSoupimportredefvisit2(url):response=requests.get(url)#检查响应是否成功ifresponse.status_code==200:#使用BeautifulSoup解析HTMLsoup=BeautifulSoup(response.text,"ht......
  • 零代码编程:用ChatGPT批量重命名多个子文件夹里面的文件标题名
    一个文件夹:D:\英语学习图书配套资源\亲子英语游戏书,这本最好玩,里面有多个子文件夹:子文件夹里面的文件要重命名,将文件名称中的track替换为子文件夹名称:在ChatGPT中输入提示词:你是一个Python编程专家,要完成一个批量删除掉对话音频文件开头的任务,具体步骤如下:打开文件夹:D:\英语学习图......
  • Altium Designer批量修改原理图参数
    1、实现目标:原理图的元器件参数批量修改批量修改元器件value值批量隐藏(例如元器件具体名称)批量修改管脚名称2、参考原理图:3、操作:批量修改元器件value值(注:这样的操作可以避免一个一个的点击元器件进行修改,可以在一个页面进行全部修改)此方法非批量修改成同一个参......
  • Navicat批量运行多个Sql文件
    有很多Sql文件要插入表,但是navicat一次只能运行一个sql文件,可以把所有sql文件里的语句插入到一个SQL文件中,然后执行最终的sql文件。详细步骤如下:切换到sql文件所在目录移走不需要导入的sql文件执行windows-type命令,如下>type*.sql>>自定义文件名.sqlnavicat运行自定义文......
  • 不会代码,也能批量数据合并,使用Python开发一个图形交互界面
    不会代码,也能批量数据合并,使用Python开发一个图形交互界面大话数据分析​​京东物流经营分析岗​关注他 作为一名数据分析师,日报,周报,月报是少不了的,经常在整理周报或者月报的时候,需要将这周的数据或者该月的数据进行一个汇总,常规地做法是将每一天的数据......
  • CTFshow Reverse 批量生产的伪劣产品 wp
    1.apk文件,jadx-gui打开2.先看AndroidManifest.xml文件,找关键类找到两个关键的类:“appinventor.ai_QA629A242D5E83EFA948B9020CD35CB60.checkme.a"和”.Screen1“2.在第一个类中直接找到flagctfshow{群主最爱36D} ......
  • ExcelToDatabase:批量导入Excel到数据库的自动化工具
    ExcelToDatabase:批量导入Excel到数据库的自动化工具点此下载最新版本支持8种主流数据库简介ExcelToDatabase是一个可以批量导入excel(xls/xlsx/xlsm/csv/txt)到数据库(mysql/oracle/sqlserver/postgresql/access/hive/sqlite/达梦)的自动化工具。自动化是其最大的特点,因为它可以根据e......
  • 多个excel文件批量导入到数据库
    多个excel文件批量导入到数据库摘要:如果我们有几十上百个excel要导入到数据库,此时如果用navicate等数据库编辑器提供的excel导入功能,手工一个一个导入就异常繁琐而且非常耗时了。这里我们使用ExcelToDatabase工具,直接批量导入,全部交给工具自动导入就好了,彻底解放双手!使用示例如图所......
  • 通过python批量调整图片的大小
    在日常工作或学习中,我们经常需要对图片进行大小调整。如果只有一两张图片,我们可以直接使用一些常见的图像处理软件(如Photoshop)来完成。但是,如果有大量图片需要调整大小,手动操作显然效率低下。这时,我们可以借助Python的PIL库来实现批量调整图片大小的功能。本文将介绍如何使用P......
  • 使用Python批量发送个性化邮件
    前言在现代工作环境中,我们经常需要向多个收件人发送个性化的邮件。通过使用Python编程语言,我们可以自动化这个过程,从Excel文件中读取收件人和相关数据,并发送定制的邮件。首先,导入所需的库:importpandasaspdimportsmtplibfromemail.mime.multipartimportMIMEMultipart......