0

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()awaittrycatchasync/await

4

0 回答 0