async
当被调用函数 (CE) 使用关键字声明并且是异步函数时,调用者函数 (CR) 是否应该使用关键字声明并因此是async
异步函数?假设除了调用 CE 之外,CR 没有执行其他异步任务,但 CR 有一些逻辑取决于从 CE 接收到的响应。
例如,我有一个apiUtils.js
文件,其中包含一个用于进行 API 调用的通用异步函数。此函数具有以下签名:
export const sendApiRequest = async (apiParametersGoHere) => {
try {
const response = await axios(objectForAxiosAsParameter); // axios() can be replaced with fetch() or XMLHttpRequest(); the idea remains the same
// processing of response
} catch (error) {
// processing of error
}
}
我还有其他文件可以导入apiUtils.js
文件来发送特定的 API 请求。例如,有一个userApi.js
文件可以导入apiUtils.js
并具有一个函数,该函数doLogin()
具有以下签名:
export const doLogin = async (userLoginRelatedParameters) => {
try {
const response = await apiUtils.sendApiRequest(apiArgumentsGoHere);
// processing of response
} catch (error) {
// processing of error
}
}
该doLogin()
函数是否应该使用async
关键字声明并因此是一个异步函数?如果是,调用堆栈中的所有调用者都应该用async
关键字声明,因此是异步函数(假设另一个函数 F 调用doLogin()
函数)?为什么会这样?
PS:请忽略仅根据关键字在函数体内使用或使用 / 块的事实来async
确定函数关键字的使用。关键字仅用于演示目的。你也可以假设链式的承诺。doLogin()
await
try
catch
async/await