JavaScript 异步转同步(伪)

众所周知,js成于异步,异步对于ajax,http网络请求很重要. 但是缺点也很明显,主要是不好看,可读性差,解决方法就是用promise,但是可读性还是不强,所以我封装了一个class,自我感觉良好,大家看看,提提意见(小白轻喷)。


class SyncTask {
constructor() {
this.ls = []
this.i = 0
}
add(fun) {
//异步函数按书写顺序加到数组里
this.ls.push(async () => {
//因为是函数,添加到数组时没调用,所以不执行
//this.start()调用this.ls[0]()数组第0个异步函数后才执行
await new Promise(fun)
//因为用了async,await,所以这里是‘同步’的
//先Promise(fun)成功后再if
if (this.i + 1 < this.ls.length) {
// 添加的时候this.i不会变,调用this.ls[0]()数组第0个异步函数执行时才加加
this.i++
//执行第1个异步函数,接下来就是一样的循环了,执行在数组索引的异步函数
//然后执行下一个在数组索引的异步函数
this.ls[this.i]()
}
})
}
start() {
this.ls[0]()
}
}

/*
使用方法
先new 这个类
var synctask = new SyncTask()
异步函数会按书写顺序执行
synctask.add(resolve => { 先执行
异步函数()=>{
resolve();这个要加到异步函数里。
}
});
synctask.add(resolve => { 后执行
异步函数()=>{
resolve();
}
});
synctask.start() 这个是开始的函数,要放到最后
*/

大家有没觉得好用,三连一下,我会更新其他我总结的js小技巧。
纯原创,如有雷同,纯属巧了不是