【发布时间】:2019-12-10 23:11:26
【问题描述】:
我正在处理一个使用 AWS Cognito 的项目。有一些配置参数需要通过 API 调用从服务器获取。我将 API 调用保存在 config.js 文件中,并使用 async/await 像这样从服务器获取响应
const getCognitoConfigs = async () => {
const res = await axios.get(`${apiurl.apiurl}/logininfo`);
console.log(res.data);
return res.data;
};
export default getCognitoConfigs;
在我的 index.js(我设置 Cognito 的地方)中,我从 config.js 文件中导入函数
import getCognitoConfigs from "./config";
const configs = getCognitoConfigs();
Amplify.configure({
Auth: {
mandatorySignIn: true,
region: configs.cognito.region,
userPoolId: configs.cognito.user_pool,
userPoolWebClientId: configs.cognito.app_client_id
}
});
问题是异步等待不会停止程序执行,因此我将“配置”视为未定义。无论如何,我可以让应用程序停止,直到 api 调用解决?谢谢。
【问题讨论】:
-
你能通过将 index.js 中的
getCognitoConfigs()包装在一个(匿名)异步函数中来等待它吗?否则,您可以使用.then()检索getCognitoConfigs()承诺的结果; -
我试过这样做,但仍然得到一个错误 ('configs' as null) let configs = null; (async function() { const res = await getCognitoConfigs(); console.log(res); configs = res; })();
-
您是否在同一个匿名异步函数中运行
Amplify.configure?如果你不这样做,configs将只是null,因为异步函数只有在你运行Amplify.configure之后才会执行。 -
啊,是的,我把 Amplify 的东西放在匿名函数之外。改变了它并且它起作用了。谢谢。
标签: javascript reactjs asynchronous import