promise实现异步任务管理

Promise是一个构造函数,我们可以通过new 创建一个promise对象。

var p = new Promise((resolve,resject) =>{
   });
console.log(p);
输出:Promise {
   <pending>}
[[Prototype]]: Promisecatch: ƒ catch()constructor: ƒ Promise()
finally: ƒ finally()then: ƒ then()Symbol(Symbol.toStringTag): 
"Promise"[[Prototype]]: Object
[[PromiseState]]: "pending"
[[PromiseResult]]: undefined

可以看到promise实例有两个属性,一个是 PromiseState,另一个是PromiseResult。
PromiseState
PromiseState表示的是promise的状态,可以通过resolve()和reject进行状态的改变,状态一当改变不可以进行二次的更改。

var p = 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Promise并发控制是一种控制同时执行的异步任务数量的方法,它可以帮助我们更好地管理异步操作并避免资源浪费和性能问题。实现Promise并发控制的方法有很多种,下面是其中一种基于Promise实现方式。 具体实现思路如下: 1. 定义一个函数 `limit`,接收两个参数:`pool` 和 `limitNum`,其中 `pool` 表示要执行的异步任务数组,`limitNum` 表示最大并发数量。 2. 创建一个 `results` 数组,用于存储所有异步任务的执行结果。 3. 创建一个 `runningCount` 变量,用于记录当前正在执行的异步任务数量。 4. 创建一个 `execute` 函数,用于执行异步任务,它接收一个 `task` 参数,表示要执行的异步任务。 5. 在 `execute` 函数中,使用 `Promise.resolve` 包装异步任务,并在 `then` 方法中执行任务并将结果存储到 `results` 数组中。 6. 在 `then` 方法中,将 `runningCount` 减 1,表示当前已执行完一个异步任务。 7. 在 `limit` 函数中,使用 `while` 循环遍历 `pool` 数组,如果当前正在执行的异步任务数量小于最大并发数量 `limitNum`,则调用 `execute` 函数执行下一个异步任务。 8. 在 `execute` 函数中,如果 `pool` 数组中还有待执行的异步任务,则继续调用 `execute` 函数递归执行任务。 9. 在 `limit` 函数中,使用 `Promise.all` 等待所有异步任务执行完毕,并返回最终的结果数组。 具体代码实现如下: ```javascript function limit(pool, limitNum) { let results = []; let runningCount = 0; function execute(task) { runningCount++; return Promise.resolve(task()) .then(result => { results.push(result); runningCount--; if (pool.length > 0) { execute(pool.shift()); } }); } while (runningCount < limitNum && pool.length > 0) { execute(pool.shift()); } return Promise.all(results); } ``` 使用示例: ```javascript let tasks = [task1, task2, task3, task4, task5]; limit(tasks, 2).then(results => { console.log(results); }); ``` 上述代码中,`tasks` 数组中存储了五个异步任务,最大并发数量为 2。调用 `limit` 函数后,它会自动控制异步任务的并发数量,等待所有任务执行完毕后返回结果数组。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值