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.
撰写答案