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

长沙专业做网站网站的构成元素

长沙专业做网站,网站的构成元素,小橘子被做h网站,成都网站建设58前言 封装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.yayakq.cn/news/705838/

相关文章:

  • 小榄网站设计贸易网站模板
  • 加强图书馆网站建设怎么在word上做超链接网站
  • 网站公司做的比较好网页制作基础教程第二版
  • 网站焦点图如何美观乐达网站建设
  • 看网站时的关键词惠州网站制作推广公司排名
  • 中国专门做生鲜的网站如何做网站运营
  • 赤风设计深圳seo公司助力网络营销飞跃
  • 河北省建设网和执业中心网站四川省住房与建设厅网站首页
  • 网站建设大作业电子版想给公司做个网站怎么做的
  • 孵化器网站建设凡科送审平台学生不能登录
  • 成都金牛区建设局网站开发app学什么编程语言
  • 网站开发用户分析广告设计公司公司vi设计
  • 潍坊设计网站建设网站开发与应用 大作业作业
  • 广东城市建设档案馆官方网站台州网站建设策划
  • 学做网站平台北京模板建站软件
  • 网站风格的特点福州品牌网站建设oem
  • 大连开发区网站开发公司seo快速优化
  • 青岛美工网页设计wordpress 优化原理
  • 给大家黄页推广网站安徽省建设厅网站证书查询
  • 商务网站建设期末作业路桥网站制作
  • 江门住房和城乡建设部网站都有哪些做二手挖机的网站
  • 一站式做网站系统展览展会策划公司
  • 商城移动端网站开发河南seo和网络推广
  • 青海旅游网站建设方案大气医院网站源码
  • 网站开发技术与应用课程设计专业网站建设人工智能研发
  • 昆明做网站的网络公司搭建网站 程序
  • 一锅汤资源网站建设大全展开网站建设
  • 门户网站建设网站模板的功能
  • 广东省建设网站网络工程就业岗位有哪些
  • 手机网站开发工具网站建设邮箱免费自助建站