JavaScript 任务队列实现

最近公司项目使用到队列,并在队列每一项中进行业务逻辑处理,大家可以看如下图片方便理解

 处理的思路

1.将list请求列表的数组加入到消息队列(任务队列),开始处理任务队列(当任务数量大于0)

2.等待一个任务完成(删除完成的任务)在处理下一个任务,直到处理完成,改变任务状态false

data(){
	return {
		//队列
		queue: [],
		//接口返回的数据(模拟)
		jieKouArr: [1, 2, 3, 4, 5, 7],
		//是否在处理状态
		isFlag: false
	}
 }

methods: {
	add() {
		//模拟点击一次相当于接口返回一次数据
		this.jieKouArr.forEach(val => {
			 this.queue.push(val)
		})
		// 队列不为空且队列处理闲置状态
		if (this.jieKouArr.length > 0 && !this.isFlag) {
			this.isFlag = true
			this.processQueue()
		}
		//add方法只是实现的例子,具体还要看具体业务,来它进行实现
	},
	request(item) {
			//这里模拟数据请求或者数据处理
			setTimeout(() => {
				console.log(item += 1);
				// 处理完成后接着调用队列
				this.processQueue()
			}, 200)
	},
	processQueue() {
		 // 去队列中第一个数据进行处理
		 let item = this.queue.shift()
		 // 判断是否为undefined,不为undefined的话说明在队列中取到数据
		 // 进行数据处理
		 if (item != undefined) {
			 this.request(item)
		 } else {
			 //队列处理完成,改变闲置状态
			 this.isFlag = false
		 }
	}
}

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值