为什么 getItem return 'Promise { "_U": 0, "_V": 0, "_W": null, "_X": null, }' 在我的代码中使用 asyncStorage?
Why getItem return 'Promise { "_U": 0, "_V": 0, "_W": null, "_X": null, }' with asyncStorage in my code?
我是 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' 控制台排在第一位,为什么它 return 那个?
请帮忙!
因为,getData()
是一个异步函数。
试试这个
getData().then(thing => console.log('c', thing, 'c'))
而不是
const thing = getData();
console.log('c',thing,'c');
由于 getData 是一个异步函数,如果您正在调用另一个异步函数,您也可以这样尝试:
const thing = await getData();
console.log('c',thing,'c');
但对于您示例中的当前代码
这是您需要调用的方式:
getData().then(thing => console.log('c', thing, 'c'))
我是 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' 控制台排在第一位,为什么它 return 那个? 请帮忙!
因为,getData()
是一个异步函数。
试试这个
getData().then(thing => console.log('c', thing, 'c'))
而不是
const thing = getData();
console.log('c',thing,'c');
由于 getData 是一个异步函数,如果您正在调用另一个异步函数,您也可以这样尝试:
const thing = await getData();
console.log('c',thing,'c');
但对于您示例中的当前代码
这是您需要调用的方式:
getData().then(thing => console.log('c', thing, 'c'))