概念
等待者模式或者等待者对象指的是多个异步逻辑无法确认先后执行的顺序以及时机时,而我们增加对异步逻辑的监听,当每个异步状态发生变化时,进行一次确认状态,然后根据结果来决定是否执行某动作。
我们常见常用的Promise.all对象就是等待者模式的一种最佳实践。
本文codepen地址:https://codepen.io/robinson90/pen/YzPQaoe
代码实现
let Waiter = function(){
// 定义内部的监听对象数组,成功回调数组,失败回调数组
let dfd = [],doneArr = [], failArr= [],
slice = Array.prototype.slice,that = this;
let Primise = function(){
this.resolved = false
this.rejected = false
}
Primise.prototype = {
resolve:function(){
// 设置当前对象解决
this.resolved = true
//如果没有监听对象 直接返回
if(!dfd.length){
return
}
for(let i = dfd.length -1 ;i>=0;i--){
// 判断监听对象中是否有未解决或者解决失败的 如果有直接返回 不执行
if(dfd[i] && !dfd[i].resolved || dfd[i].rejected){
return
}
// 删除监听对象
dfd.splice(i,1