当前位置: 首页 > news >正文

qq客服代码 wordpress南宁seo推广公司

qq客服代码 wordpress,南宁seo推广公司,青海手机网站建设,做结婚请柬网站有那些前言 封装processTasks函数,实现以下需求 /*** 依次顺序执行一系列任务* 所有任务全部完成后可以得到每个任务的执行结果* 需要返回两个方法,start用于启动任务,pause用于暂停任务* 每个任务具有原子性,即不可中断,只…

前言

封装processTasks函数,实现以下需求

/*** 依次顺序执行一系列任务* 所有任务全部完成后可以得到每个任务的执行结果* 需要返回两个方法,start用于启动任务,pause用于暂停任务* 每个任务具有原子性,即不可中断,只能在两个任务之间中断* @param {...Function} tasks 任务列表,每个任务无参、异步*/
function processTasks(...tasks){}

实现

初步框架如下

function processTasks(...tasks) {const result = []let i = 0 // 当前任务索引let isRunning = false // 是否正在运行return {async start() {isRunning = truewhile (i < tasks.length) {result.push(await tasks[i]())i++if (!isRunning) return // 暂停}},pause() {isRunning = false},}
}

继续改造start的返回,手动控制Promise:

function processTasks(...tasks) {const result = []let i = 0 // 当前任务索引let isRunning = false // 是否正在运行let prom = null // 记录promise结果,防止二次调用start时重复执行之前的任务return {start() {return new Promise(async (resolve, reject) => {if (prom) {// 结束了prom.then(resolve, reject)return}if (isRunning) return // 正在运行,防止多次调用isRunning = truewhile (i < tasks.length) {try {result.push(await tasks[i]())} catch (err) {isRunning = falsereject(err)prom = Promise.reject(err)return // 失败终止}i++if (!isRunning && i < tasks.length - 1) return // 暂停}isRunning = truewhile (i < tasks.length) {try {result.push(await tasks[i]())} catch (err) {isRunning = falsereject(err)prom = Promise.reject(err)return // 失败终止}i++if (!isRunning && i < tasks.length - 1) return // 暂停}// 成功isRunning = falseresolve(result)prom = Promise.resolve(result)})},pause() {isRunning = false},}
}

测试

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script src="./aa.js"></script>
</head><body><button id="start">开始任务</button><button id="pause">暂停任务</button><script>const tasks = []for (let i = 0; i < 5; i++) {tasks.push(() => new Promise(resovle => {setTimeout(() => {resovle(i)}, 2000);}))}const processor = processTasks(...tasks)start.onclick = async () => {console.log("开始任务");const results = await processor.start()console.log("任务执行完成:", results);}pause.onclick = () => {console.log("点击暂停");processor.pause()}</script>
</body></html>

使用场景

大文件分片上传

http://www.tj-hxxt.cn/news/88146.html

相关文章:

  • 中国监理建设协会网站百度搜索风云榜电脑版
  • 京东购物中心优化
  • 网站开发 青岛百度搜索网页版入口
  • 长春作网站的那家百度官方客服电话
  • 宝塔做网站聊城网站推广公司
  • 微商网站如何做推广方案合肥关键词排名
  • 浙江省电子商务网站建设营销方法有哪些
  • 做学校网站素材图片大全seo推广优化方案
  • 找事做搜索网站电子商务营销的概念
  • 日本做牛仔裤视频网站网络优化seo是什么工作
  • 做无障碍浏览网站杭州百度开户
  • 百度做的网站国外可以打开吗百度站长工具怎么关闭教程视频
  • wordpress 菜单 下拉菜单大型seo公司
  • 房地产网站建设内容seo外包品牌
  • 网站的模块最近一周新闻热点大事件
  • 建设银行上海黄浦支行网站近日网站收录查询
  • 邮件网站怎么做新乡网站优化公司价格
  • 网站图片设置品牌关键词优化哪家便宜
  • 商城用什么系统做网站百度搜索浏览器
  • 网站开发 项目的招标文件游戏代理平台
  • 做网站服务器空间宁波seo排名优化哪家好
  • 网站优化营销公司自建站模板
  • 互联网网站建设新闻企业网址怎么注册
  • 网站建设 500强建站深圳谷歌优化seo
  • 免费中文网站模板今天国内新闻
  • 网站建设宣传册2021最近比较火的营销事件
  • 精品网站开发公司广告公司起名大全最新
  • 苏州集团网站制作开发网站关键词快速排名工具
  • 源码制作网站教程沧浪seo网站优化软件
  • 什么网站做问卷好软文发布平台与板块