前端阅读 495月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() 回调的参数。// 三个方案的同一操作// CallbackgetData((err, data) => { if (err) return; process(data); });// PromisegetData().then(process).catch(handleError);// async/awaittry { 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。