欢迎光临散文网 会员登陆 & 注册

JavaScript 异步转同步(伪)

2022-09-23 00:12 作者:态度好点哦  | 我要投稿

      

         众所周知,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小技巧。   

                                                                           纯原创,如有雷同,纯属巧了不是


JavaScript 异步转同步(伪)的评论 (共 条)

分享到微博请遵守国家法律