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((resolve, reject) => {
console.log("三秒后执行p1")
setTimeout(() => {
console.log("即将执行p1");
resolve({info:'p1'})
console.log("p1 byebye ")
for(;;){}
}, 3000)
})
let p2 = new Promise((resolve, reject) => {
console.log("三秒后执行p2")
setTimeout(() => {
console.log("即将执行p2");
resolve({info:"p2"})
console.log("p2 byebye ")
}, 3000)
})
Promise.race([p1, p2]).then(v => { console.log("有人跑出来了吗?" + v.info); })
}
}