同步 vs 异步
同步:代码按顺序执行。
异步:不阻塞后续代码执行。
回调函数
传统异步方式。
1 2 3 4 5 6 7 8 9
| function fetchData(callback) { setTimeout(() => { callback('data') }, 1000) }
fetchData((data) => { console.log(data) })
|
回调地狱
1 2 3 4 5 6 7
| fetchData((data1) => { fetchData2(data1, (data2) => { fetchData3(data2, (data3) => { }) }) })
|
Promise
解决回调地狱。
1 2 3 4 5 6 7 8 9 10 11
| const promise = new Promise((resolve, reject) => { setTimeout(() => { resolve('data') }, 1000) })
promise.then(data => { console.log(data) }).catch(error => { console.error(error) })
|
Promise 链式调用
1 2 3 4
| fetchData() .then(data => processData(data)) .then(result => displayResult(result)) .catch(error => handleError(error))
|
async/await
更简洁的语法。
1 2 3 4 5 6 7 8 9 10
| async function fetchData() { try { const data = await new Promise(resolve => { setTimeout(() => resolve('data'), 1000) }) console.log(data) } catch (error) { console.error(error) } }
|
并发处理
1 2 3 4 5 6 7 8 9 10
| const promises = [fetch1(), fetch2(), fetch3()] Promise.all(promises).then(results => { })
Promise.race(promises).then(result => { })
|
总结
异步编程是 javascript 核心。多练习 Promise 和 async/await,避免回调地狱。