非同步函式與同步函式是非常多人所誤解
先來看一下同步
console.log('1')
console.log('2')
這樣就是了?
這跟平常JavaScript有什麼兩樣???
沒錯!!! JavaScript其實只有一條主程式(single thread),所以很容易會阻塞。
而當我們要去獲取外部的資料,舉例: 我要去中央氣象局透過api拿溫度資料。
我們的步驟如下:
更直白的說法,在餐廳中:
而JavaScript就是使用非同步的方式製造有多工的假象。
其實setTimeout就是web api(非同步函式)
function Getdata() {
console.log('1');
setTimeout(function() {
console.log('2, 等我1秒');
},1000)
console.log('3');
}
Getdata()
/*
1
3
2 等我1秒
*/
只要用到web api,不論是否為0秒都要等待被呼叫
function Getdata() {
console.log('1');
setTimeout(function() {
console.log('2, 等我0秒');
},0)
console.log('3');
}
Getdata()
/*
1
3
2 等我0秒
*/
明天我們會進入Promise,看Promise如何解決callback的痛點!!!