Javascript 等待异步完成,然后将数据保存在变量中
我对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
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抱歉,我没有注意到您的导出
语句。我已经编辑了我的答案,看一看