函数外部的javascript变量(使用异步/等待)?

函数外部的javascript变量(使用异步/等待)?,javascript,Javascript,我有以下代码,由于语法错误而无法工作(在异步函数外部等待) 如何使用wait定义变量并将其导出 当我定义这样一个变量并从其他文件导入它时,该变量是只创建一次(当文件第一次读取时?)还是每次导入时都创建 代码 import _ from 'lodash' import remoteConfig from '@react-native-firebase/remote-config' class RemoteConfig { constructor() { if (__DEV__)

我有以下代码,由于语法错误而无法工作(在异步函数外部等待)

  • 如何使用wait定义变量并将其导出

  • 当我定义这样一个变量并从其他文件导入它时,该变量是只创建一次(当文件第一次读取时?)还是每次导入时都创建

  • 代码

    import _ from 'lodash'
    import remoteConfig from '@react-native-firebase/remote-config'
    
    class RemoteConfig {
      constructor() {
        if (__DEV__) {
          //Fetch, no cache. activate
          remoteConfig().fetchAndActivate(0)
        } else {
          //Fetch, cache for 5 minutes and activate
          remoteConfig().fetchAndActivate()
        }
      }
    
      static async build() {
        await remoteConfig().setConfigSettings({
          minimumFetchIntervalMillis: 300000,
        })
    
        return new RemoteConfig()
      }
    
      setDefaults(defaults) {
        remoteConfig().setDefaults(defaults)
      }
    
      getValues(keys) {
        return _.pick(remoteConfig().getAll(), keys)
      }
    
      getValue(key) {
        return remoteConfig().getValue(key)
      }
    }
    
    export let firebaseConfig = await RemoteConfig.build()
    
    我将它与
    import{firebaseConfig}from path/to/thefile一起使用

  • wait
    只能在
    async
    函数中使用。无法使用
    await
    语法导出变量

  • 由于无法使用
    wait
    导出,因此很难说每次是否调用
    RemoteConfig.build()
    。 如果我们假设,您编写了
    firebaseConfig=RemoteConfig.build()。该函数将在评估模块时调用一次

  • 以下是一个解决方法:

    您可以定义一个函数来设置
    firebaseConfig
    ,并在应用程序启动时调用它

    因此:

    导出let firebaseConfig;
    导出异步函数setFirebaseConfig(){
    firebaseConfig=await RemoteConfig.build();
    }
    

    这将允许您不必多次调用
    RemoteConfig.build()
    。另外,
    firebaesConfig
    可以在不使用
    await
    语法的情况下导出。

    要实现这一点,您必须等待允许这样做的时间(使用像这样的transpiler,您现在可以使用它)。它将允许完全相同的代码,你有


    在此之前,实现像这样导出变量的唯一方法是保证变量的值,所有导入者都必须自己等待。

    如果OP不希望在导入中执行函数,是否可以使用异步自调用函数来代替它?
    RemoteConfig.build()
    不会被多次计算。模块代码在导入时第一次进行评估,然后将相同的导出返回给所有导入方。我不确定您所说的
    OP是什么意思,我不想在导入中执行函数。因为如果他从子组件导入配置,那么每次组件出现时都会调用该函数。只要在应用程序引导时调用它,就会初始化firebaseConfig,并且它可以在整个应用程序中使用。@eugene,这只不过是一次。@yash我想你是想使用单例模式。既然您已经在构造函数中使用了异步函数,为什么不从那里调用build()方法并只导出类的单个实例呢?