javascript是单线程的,代码示范如下

很多人不知道javascript是单线程的,不知道也不影响一般的开发,但是处理复杂业务逻辑的时候,是需要了解这个特性的(会影响setTimeout /  setInterval等 及Promise的使用)

 

本文适合一些想精进的菜鸟和中级前端开发人员,大神可以飘过

class TGo3 {
    start() {
        let ia = 0;
        setTimeout(() => {
            for (; ;) { }
            console.log("asyntaskA:" + ia++)
        }, 3000);
        let ib = 0;
        setTimeout(() => {

            console.log("asyntaskB:" + ib++)
        }, 3000);

    }
}
t01 = new TGo4()
t01.start(t01)
console.log("主流程结束")

以上代码执行时,taskB永远不会得到输出。(taskA内死循环占了资源)
同样的示例换成Promise也是一样的
 
在一般情况下不需要考虑这个问题,如果业务逻辑复杂,遇到并发竞争资源时,需要考虑一下这一点。
 
下面一段留给大家参考(逻辑一样)
 
class TGo4 {
    start() {
        let p1 = new Promise((resolvereject=> {
            console.log("三秒后执行p1")
            setTimeout(() => {
                console.log("即将执行p1");
                resolve({info:'p1'})
                console.log("p1 byebye ")
                for(;;){}
            }, 3000)

        })
        let p2 = new Promise((resolvereject=> {
            console.log("三秒后执行p2")
            setTimeout(() => {
                console.log("即将执行p2");
                resolve({info:"p2"})
                console.log("p2 byebye ")
            }, 3000)

        })
        Promise.race([p1p2]).then(v => { console.log("有人跑出来了吗?" + v.info); })
      
    }
}
posted @ 2020-09-19 20:02  小侬  阅读(149)  评论(0编辑  收藏  举报