5月27日 01:17
Promise 和 async/await 和 Callback 有什么区别?
三个阶段的异步方案,层层递进:
Callback:把后续操作作为回调函数传给异步操作。问题是回调地狱——多层嵌套横向增长,错误处理每个回调都得单独处理。
Promise:把回调包装成对象,链式 .then() 解决横向嵌套,.catch() 统一处理错误。但长链仍不够直观,且 .then() 里不能直接用 try-catch。
async/await:Promise 的语法糖。async 函数返回 Promise,await 暂停执行等结果。写法就是同步代码的样子,错误用 try-catch。本质还是 Promise——await 的值就是 .then() 回调的参数。
javascript// 三个方案的同一操作 // Callback getData((err, data) => { if (err) return; process(data); }); // Promise getData().then(process).catch(handleError); // async/await try { const data = await getData(); process(data); } catch { handleError(); }
追问
async/await 怎么处理并发请求?
Promise.all([fetch1, fetch2]) 配合 await。不要写成 await fetch1(); await fetch2()——这样是串行的,第二个请求等第一个完成才发。
async 函数返回的 Promise 和普通 Promise 有区别吗?
没有本质区别。async 函数内部抛错等于 reject,return 值等于 resolve。唯一注意的是:async 函数返回的 Promise 是原生 Promise,即使你 return 的是一个 thenable 对象,也会自动包裹成 Promise。