是否应将bookInterview函数改为async?异步函数适用场景解析
是否需要将bookInterview改为async函数?
不是必须,但改成async函数能带来不少实用的好处,具体原因如下:
- 语法更简洁易读:async/await是Promise的语法糖,能把嵌套的
then回调改成线性的同步风格代码,逻辑更清晰。比如原代码的then回调可以直接用await替代,避免回调嵌套:
async function bookInterview(id, interview) { const appointment = { ...state.appointments[id], interview: { ...interview }, }; const appointments = { ...state.appointments, [id]: appointment, }; // 用await替代then回调,代码结构更扁平 const response = await axios.put(`/api/appointments/${id}`, { interview }); setState({ ...state, appointments, days: getUpdatedDays(appointments), }); }
同步错误自动捕获:如果原函数中存在同步错误(比如
state.appointments[id]不存在导致解构失败),原来的代码会直接抛出错误,不会进入save函数的catch分支。改成async函数后,所有同步错误都会被自动包装成Promise的reject状态,save函数的catch能统一捕获异步请求错误和同步代码错误,不需要额外加try/catch处理同步逻辑。代码风格统一:如果项目中其他异步操作都采用async/await的写法,把这个函数改成async能保持团队代码风格一致,降低协作成本。
另外需要注意:改成async函数后,它返回的依然是Promise,所以save函数里的.then()和.catch()调用完全不需要修改,兼容性很好。
内容的提问来源于stack exchange,提问作者Kosta
相关产品推荐
相关产品推荐

