登录
登录 注册新账号
注册
已有账号登录

axios 接口封装已经使用了async await?在页面调用的时候还用使用async await吗?这种再写一次async,await是有意义的吗,求指教?

const result = await this.$post("logistics/sale/area.action"

async function post<T>(url: string, data?: any, config?: any): Promise<T> {
  try {
    return await instance({
      ...config,
      method: "POST",
      url: config && config.intact ? url : API_URL + url,
      data
    });
  } catch (error) {
    console.log(error);
    return Promise.reject(error);
  }
}
2 个回答

async 标记当前函数是异步函数,内部支持 await 等待异步执行。返回值是 Promise 实例。

所以你这样封装之后,外面使用封装后的函数时仍然需要 async/await。这样做有没有意义要看你怎么封装。一般来说,封装要发挥作用,至少要处理常见错误、提取真实数据,等。类似问题中这样不封装也罢。

async/await只是语法糖,如果你想在你的代码中使用await,你就必须把你的函数定义为async,和你调用其他库比如axios无关,只和你自己的代码有关,也和其他库是否使用async/await无关,其他库只需要返回Promise或者可以转成Promise就可以,不管是否是async方法,只要返回Promise,你都可以await它。

所以你这个问题,和axios是否使用async/await无关,你是否再封装一层,要看你是否在这层中做了更多的处理,比如url: config && config.intact ? url : API_URL + url等,如果觉得大家为了重用这句代码再封装一层有价值,那就封装,至于是否用async/await,就看你是否想用await,如果你不想用await,可以不用async,直接用Promise.then去处理,你想用await的话,就得写async.

撰写答案