异步函数的调用者应该是异步的吗?

时间:2021-06-12 11:10:49

标签: javascript ajax asynchronous asynchronous-javascript

当被调用函数(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 关键字仅用于演示目的。您还可以假设承诺链。

0 个答案:

没有答案