javascript - 如何从导入调用异步函数?

标签 javascript react-native async-await i18next

我有这个异步代码函数来从 AsyncStorage 获取 lang var。我想在构造(?)方法中的每个应用程序页面上调用此函数。但是当我尝试调用它时,看起来代码是同步运行的,我的loadLang是= { _45: 0, _81: 0, _65: null, _54: null }。如何以正确的方式去做?谢谢。

ma​​in.js

import load from "./components/languageLoad"
               constructor(props) {
                    super(props);

                    let loadedLang = load();
                    console.log("LOADED", loadedLang);

                    this.state = {
                        settings: 1,
                        deviceLocale: "EMPTY"
                    };
                }

语言加载.js

import React, { Component } from 'react';
import { AsyncStorage} from 'react-native';
import Lang from 'react-native-i18n'

export default load = async () => {
            try {
                const customLang = await AsyncStorage.getItem('customLang');
                if (customLang !== null && customLang !== undefined && customLang !== "") {
                    deviceLocale = customLang;
                }

            } catch (error) {
                deviceLocale = Lang.locale.split("-")[0] || "uk";
            }
            console.log("------------", deviceLocale, '-------------');
            console.log("------------", Lang.t('aboutAppText') , '-------------');
            Lang.locale = deviceLocale;
            return Lang;
        }

最佳答案

async 函数需要使用 await 调用,并且只能从异步函数内部调用。

JS 构造函数不能是异步的。因此,您将不得不重组代码以使其以不同的方式工作。要么在构造函数外部加载数据,要么在构造函数中使用匿名自执行异步函数来加载数据并存储数据。当然,类(class)的其余部分将需要处理数据可能不存在的事实。

关于javascript - 如何从导入调用异步函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43708955/

相关文章:

javascript - JavaScript promises 和 async await 有什么区别?

javascript - 获取jquery中div的特定输入(子)元素的id或类名

javascript - 如何使用 jQuery 在输入标记内添加属性?

javascript - 将作为 mathjax 命令的 javascript 变量插入到输出格式化数学的 html 页面中

javascript - 如何使用正则表达式匹配精确的字符串

c# - 对 WCF 服务的异步调用不保留 CurrentCulture

android - react native : Android WebView returns blank screen for some websites and some devices

ios - 无法在 <Text/> 中创建 <ActivityIndi​​catorIOS/>

swift - 找不到“双转换/双转换.h”文件

c# - 正确使用 Task.WhenAll