为啥 getItem 在我的代码中使用 asyncStorage 返回 'Promise "_U": 0, "_V": 0, "_W":
Posted
技术标签:
【中文标题】为啥 getItem 在我的代码中使用 asyncStorage 返回 \'Promise "_U": 0, "_V": 0, "_W": null, "_X": null, \'?【英文标题】:Why getItem return 'Promise "_U": 0, "_V": 0, "_W": null, "_X": null, ' with asyncStorage in my code?为什么 getItem 在我的代码中使用 asyncStorage 返回 'Promise "_U": 0, "_V": 0, "_W": null, "_X": null, '? 【发布时间】:2021-12-10 06:27:45 【问题描述】:我是 react native 的新手,我尝试使用 AsyncStorage 存储所选语言,但有一个我不明白的问题。
import * as Localization from 'expo-localization';
import i18n from 'i18n-js';
import en, fr from '../i18n/supportedLanguages';
import AsyncStorage from '@react-native-async-storage/async-storage';
i18n.fallbacks = true;
i18n.translations = en, fr ;
i18n.locale = Localization.locale;
const storeData = async () =>
try
const exist = await AsyncStorage.getItem('selectedLanguage');
console.log('a',exist, 'a');
if (exist == null)
await AsyncStorage.setItem(
'selectedLanguage',
i18n.locale
);
catch (error)
;
const getData = async () =>
try
const value = await AsyncStorage.getItem('selectedLanguage');
if (value !== null)
console.log('b',value,'b');
return value;
catch (error)
;
storeData();
const thing = getData();
console.log('c',thing,'c');
结果是:
c Promise
"_U": 0,
"_V": 0,
"_W": null,
"_X": null,
c
a fr-FR a
b fr-FR b
我想知道为什么 'c'console 会先出现,为什么会返回? 请帮忙!
【问题讨论】:
【参考方案1】:因为,getData()
是一个异步函数。
试试这个
getData().then(thing => console.log('c', thing, 'c'))
而不是
const thing = getData();
console.log('c',thing,'c');
【讨论】:
【参考方案2】:由于 getData 是一个异步函数,如果你正在调用另一个异步函数,你也可以这样尝试:
const thing = await getData();
console.log('c',thing,'c');
但对于您示例中的当前代码
这是你需要调用的方式:
getData().then(thing => console.log('c', thing, 'c'))
【讨论】:
以上是关于为啥 getItem 在我的代码中使用 asyncStorage 返回 'Promise "_U": 0, "_V": 0, "_W": 的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Async Await 可以与 React setState 一起使用?
为啥当我使用 [:] 时我的子类的 __getitem__ 和 __setitem__ 没有被调用?