常見的非同步
setTimeout、 XMLHttpRequest
這裡以 setTimeout 做示範:點擊按鈕,會兩數相加,兩秒後顯示結果。
1 | let btn =document.querySelector('#btn'); |
解決方式
回呼函式 Callbacks

1 | function delayAdd(n1,n2,sec,callback) { |
Promise
- 創建
new Promise reslove對應thanreject對應cath
1
2
3
4
5
6
7
8
9
10
11
12
13function delayAdd(n1,n2,sec) {
return new Promise(function (reslove,reject) {
setTimeout(function (params) {
reslove(n1 + n2)
},sec)
})
}
function test(){
let promise=delayAdd(1,2,2000)
promise.then(function (result) {
console.log(result)
})
}Promise.all

1
2
3
4
5
6
7function test(params) {
let promise1=delayAdd(1,2,2000)
let promise2=delayAdd(3,4,3000)
Promise.all([promise1,promise2]).then(function (results) {
console.log(results)
})
}Async/Await
本質還是Promise,簡化Promise的語法糖。
1
2
3
4
5
6
7
8
9
10
11function delayAdd(n1,n2,sec) {
return new Promise(function (reslove,reject) {
setTimeout(function (params) {
reslove(n1 + n2)
},sec)
})
}
async function test(params) {
let result=await delayAdd(1,2,2000)
console.log(result)
}範例
本文範例程式碼
XMLHttpRequest + Promise 範例參考文章
https://www.youtube.com/watch?v=NOprCnnjHm0