当被调用函数(CE)使用async
关键字声明并且是异步函数时,调用者函数(CR)是否应该使用async
关键字声明并因此是异步函数?假设 CR 除了调用 CE 之外没有其他异步任务,但是 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
关键字仅用于演示目的。您还可以假设承诺链。