【JavaScript】简单使用生成器函数和迭代器的任务处理队列

JavaScript中经常会遇到需要按顺序执行的任务队列操作,比如在前端中拼接数据导出excel。

在后端接口不改变的情况下,通过循环请求拼接数据的方式生成excel,并且做出一个真实进度的进度条。

在直接使用for循环的情况下会导致进度条跑满了,由于浏览器并发数量的限制,有一部分接口还在排队请求中。

当然可以通过使用递归Promise方式来实现,这里使用了生成器函数和迭代器来实现这个需求。

js异步任务队列处理

假设有一个需要耗时并且按顺序处理的任务队列,队列中有一摞数字[1,2,3,4,5,6,7,8,9]需要处理。

通过生成函数和迭代器,按顺序一个个执行处理并输出处理结果。并且可以在中间使用setTime来减慢函数执行速度。

使用event.next()来启动迭代

当执行到最后一个时:迭代器返回的结果 done:true。

// 待处理数组列表
const list = [1,2,3,4,5,6,7,8,9]
// 迭代函数
const event = eventList(list)
// 迭代处理炒作
function doIt(item) {
  setTimeout(() => {
    console.log('处理事件',item)
    // 输出迭代
    console.log('event.next()',event.next())
  },Math.random()*1000)
}
// 函数指针
function* eventList(list) {
  for (let i = 0; i < list.length; i++) {
    // 迭代函数
    yield doIt(list[i])
  }
}
处理事件 1
VM238:9 event.next() {value: undefined, done: false}
VM238:7 处理事件 1
VM238:9 event.next() {value: undefined, done: false}
VM238:7 处理事件 2
VM238:9 event.next() {value: undefined, done: false}
VM238:7 处理事件 3
VM238:9 event.next() {value: undefined, done: false}
VM238:7 处理事件 4
VM238:9 event.next() {value: undefined, done: false}
VM238:7 处理事件 5
VM238:9 event.next() {value: undefined, done: false}
VM238:7 处理事件 6
VM238:9 event.next() {value: undefined, done: false}
VM238:7 处理事件 7
VM238:9 event.next() {value: undefined, done: false}
VM238:7 处理事件 8
VM238:9 event.next() {value: undefined, done: false}
VM238:7 处理事件 9
VM238:9 event.next() {value: undefined, done: true}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值