【问题标题】:Import data from async function从异步函数导入数据
【发布时间】: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


【解决方案1】:

如果你想使用 async/await,你必须将 index.js 包装在一个异步函数中并添加

await getCognitoConfigs();

或者你可以使用类似的承诺

getCognitoConfigs().then(res => Amplify.configure({...}))

【讨论】:

    猜你喜欢
    • 2017-09-28
    • 1970-01-01
    • 2018-02-17
    • 2021-04-14
    • 2019-04-25
    • 1970-01-01
    • 2016-08-11
    • 2015-04-21
    • 2020-04-07
    相关资源
    最近更新 更多