reactjs - 不能在导出函数上使用等待?
问题描述
我有一个围绕 Axios 的 APIService 包装器,我返回它并使用 .then() 来处理承诺,但现在我想使用 async/await;我想知道为什么我的功能在这种新情况下不再起作用;因为我在返回之前只向 Axios 实例添加了几个配置。
转向 async/await 的逻辑是因为这似乎是使用 nextjs 和 getInitialProps 的最佳实践方式。
我的 APIService.js;
import axios from "axios";
import { API_URL } from './constants';
const config = {
baseURL: API_URL,
};
const APIService = axios.create(config);
APIService.interceptors.request.use(request => {
const token = 'blah;
request.headers.Authorization = token ? `Bearer ${token}` : '';
return request;
});
APIService.interceptors.response.use(
response => response,
error => {
if (error.response.status === 401) {
// do something
return true;
}
return Promise.reject(error);
},
);
export default APIService;
我希望上述函数在这样调用时能够工作;
import APIService from '../../utils/APIService';
Page.getInitialProps = async function({ res, query }) {
const req = await APIService.get('/endpoint', {});
const { data } = req;
return {
data
};
};
我应该如何重构我的 APIService 以在上述情况下工作,以及为什么需要重构,因为我不操纵 Axios 函数的工作方式......
解决方案
await
不能在顶层使用,它必须在异步函数中。有一种常见的做法可以解决此问题,但不建议这样做:
(async function() {
const response = await APIService.get('/endpoint', {});
...
}());
// or
(async function() {
const response = await APIService.get('/endpoint', {});
...
}()).then(...);
有一个建议允许在顶层进行异步导入,但它仍处于第 3 阶段。您可以在本文中阅读有关此主题的更多信息
推荐阅读
- machine-learning - 知情作为评分标准
- java - 有没有办法在 Jakarta 3 中使用 Java 11 添加自定义 IDResolver?
- python - Python 异常指南解释
- python - 合并插入混合排序中的键比较
- oauth - 每个组织具有不同范围的 Auth0 访问令牌
- regex - EBS 搜索字符串中的特殊字符?
- reactjs - 从 Postman 获取 GET 响应,而不是从 React 前端获取响应
- python - 将列表拆分为具有所有组合的 n 个不均匀桶
- laravel - 导入laravel excel时取消定义偏移量:1
- r - 将垂直数据框转换为水平数据框 - R