【发布时间】:2021-08-31 10:44:11
【问题描述】:
我有一个功能组件
import { DEFAULT_LANGUAGE} from './translations';
import React, { useState } from 'react';
export const Welcome= () => {
const [appLanguage, setAppLanguage] = useState(DEFAULT_LANGUAGE);
console.log(appLanguage);
};
translations.js
import AsyncStorage from '@react-native-async-storage/async-storage';
export const DEFAULT_LANGUAGE= async () => {
try {
const response = await AsyncStorage.getItem('appLanguage');
if(response){
return response;
}
else{
return 'English';
}
}
catch (e) {
return 'English';
}
}
appLanguage 返回承诺对象而不是值。如何在内部作为常量变量执行异步操作?
【问题讨论】:
-
DEFAULT_LANGUAGE是一个函数。你需要调用它。要在组件挂载时运行异步函数,请将useEffect与空依赖数组一起使用。 -
你能做到
useState(await DEFAULT LANGUAGE())吗? (你可能还需要async Welcome) -
@Grzegorz - 不,组件功能需要同步。不能在同步函数中使用
await。 -
@T.J.Crowder 如果你制作了
const getDefLang = async () => await DEFAULT_LANGUAGE()并在useState中使用它会怎样? -
@Grzegorz - 同样的问题,
async函数总是返回承诺,所以你会得到一个承诺,而不是价值。 You can't get an asynchronous result synchronously.
标签: javascript reactjs typescript react-native es6-promise