Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 等待异步完成,然后将数据保存在变量中_Javascript_React Native - Fatal编程技术网

Javascript 等待异步完成,然后将数据保存在变量中

Javascript 等待异步完成,然后将数据保存在变量中,javascript,react-native,Javascript,React Native,我对JavaScript完全是新手。。。我有以下代码: const MMKV = new MMKVStorage.Loader().initialize(); async function getData() { let role = await MMKV.getStringAsync("role"); if (role === "distribuidor") { consumerKey = Constants.Keys.distribu

我对JavaScript完全是新手。。。我有以下代码:

const MMKV = new MMKVStorage.Loader().initialize();

async function getData() {
  let role = await MMKV.getStringAsync("role");
  if (role === "distribuidor") {
    consumerKey = Constants.Keys.distributorConsumerKey;
    consumerSecret = Constants.Keys.distributorConsumerSecret;
    return [consumerKey, consumerSecret];
  }
};

let data = getData();

let consumerKey = data[0];
let consumerSecret = data[1];

export default {

  WooCommerce: {
  url: "https://xxxxx.com/",
  consumerKey,
  consumerSecret,
},
但消费市场和消费信贷总是没有定义

我知道(我认为)这是因为getData()函数是异步的,当我将数据保存在变量中时,函数还没有完成执行,但我不知道如何正确执行。我已经有很长一段时间了,我读过关于回调函数、承诺。。。我想解决办法可能会在那里,但我很迷茫

我将非常感谢您的帮助。非常感谢大家

问候。

getDate()返回您必须添加的承诺。然后将代码移到其中

getDate()。然后(数据=>{
设consumerKey=data[0];
让consumerSecret=data[1];
})

一旦开始执行异步操作,代码就无法同步返回结果

您有多个选项来解决此问题(两者都不会“同步”代码):

  • 使用。这是正确地异步导出内容的唯一方法。如果此功能当前不可用,则可以使用以下工具传输代码,如

  • 使用IIAFE(立即调用的异步函数表达式)包装器:

    您必须导出承诺,而不是值,如下所示:

      export default {
        WooCommerce: (async() => {
          let data = await getData();
    
          let consumerKey = data[0];
          let consumerSecret = data[1];
    
          return {
            url: "https://xxxxx.com/",
            consumerKey,
            consumerSecret,
          };
        })(),
      }
    
      export default {
        WooCommerce: getData()
          .then(data => {
    
            let consumerKey = data[0];
            let consumerSecret = data[1];
    
            return {
              url: "https://xxxxx.com/",
              consumerKey,
              consumerSecret,
            };
          }),
      }
    
  • 然后

      getData()
        .then(data => {
    
          let consumerKey = data[0];
          let consumerSecret = data[1];
    
          //More code here
        })
    
    您还必须导出承诺,而不是值,如下所示:

      export default {
        WooCommerce: (async() => {
          let data = await getData();
    
          let consumerKey = data[0];
          let consumerSecret = data[1];
    
          return {
            url: "https://xxxxx.com/",
            consumerKey,
            consumerSecret,
          };
        })(),
      }
    
      export default {
        WooCommerce: getData()
          .then(data => {
    
            let consumerKey = data[0];
            let consumerSecret = data[1];
    
            return {
              url: "https://xxxxx.com/",
              consumerKey,
              consumerSecret,
            };
          }),
      }
    

让数据=等待获取数据()
应该做这个小把戏你不再需要
让数据
任何正在使用
consumerKey
ConsumerCret的东西都应该写在里面,关于承诺的更多细节,以及如何使用或处理它,请在FZs中查看这个网站,但是在功能结束之前执行“导出默认值”,我怎样才能解决这个问题?感谢大家,我正在学习它是如何工作的。@jaime抱歉,我没有注意到您的
导出
语句。我已经编辑了我的答案,看一看