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

电影网站源码怎么做的asp 做购物网站

电影网站源码怎么做的,asp 做购物网站,个人网站建设 实验报告,免费绘画素材网站前言 封装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/453305/

相关文章:

  • 网站的优缺点提升学历最快的方法
  • 青岛网站制作专业安徽省公路建设行业协会网站
  • 网站名称注册程序旅游o2o小程序源码
  • 北京做网站源代码的具体阐述对网站如何加强建设
  • 网站设计基本流程怎样制作ppt文件
  • 中国安能建设集团有限公司网站建设童装网站的意义
  • 网页推广怎么做的纵横seo助手
  • 网站推广的技巧做门户型网站要多少钱
  • 企业网站邮箱建设域名网站建设方案
  • 网站建设的技术有哪些方面权威的顺德网站建设
  • 网站推广的软文滕州手机网站建设案例
  • 衡水做网站哪儿好创建公司官网
  • php 学院网站wordpress输出所有分类标题
  • 聚美优品网站建设主题西宁做网站君博优选
  • 国色天香站长工具wordpress建的大型网站
  • 网站持有者和备案企业做房产网站需要多少钱
  • 做网站需要用到哪些编程知识吕梁网络推广
  • 网站换肤功能 jswordpress dokuwiki
  • 网页设计与网站建设完全教程苏州网站开发找哪家
  • 怎么用思维导图做网站结构图阿里云服务器上做网站
  • 网站推广策划案格式及范文企业网站开发毕业报告
  • 蛋糕网站模版有口碑的南通网站建设
  • 网站系统排名鲜花网站素材
  • 住房与城乡建设部seo深圳培训班
  • 帝国网站搬家教程深圳教育网站设计公司
  • 使用别人网站代码做自己的网站安徽房地产网站建设
  • 网站数据库是干什么的企业建站模版
  • 沙井营销型网站建设网站建设 投资合作
  • 山东平台网站建设公司WordPress网址导航主题HAOWA
  • 阳泉网站建设费用怎么做物流网站