我的问题是我想从这个功能得到一个json,但我得到的只是一个承诺,为什么我选择这种方式,因为在应用程序中,我正在进行动态工作,但我唯一的地方看到我可以把这个承诺变成render()
这是我的代码:
var userInfo = (async()=>{
var value = await AsyncStorage.getItem("@user_info");
value = JSON.parse(value);
return value ;
})();
这是我的结果:
Promise {
"_40": 0,
"_55": null,
"_65": 0,
"_72": null,
}
但我想得到的是json我必须做什么?
答案 0 :(得分:1)
您必须从componentDidMount
调用此函数,并在承诺完成后,致电setState
。
以下是如何执行此操作的规范示例:
class User extends React.Component {
state = { user: null };
render() {
return this.state.user && <div>{this.state.user.name}</div>;
}
async componentDidMount() {
const value = await AsyncStorage.getItem("@user_info");
if (!this._unmounted) {
const user = JSON.parse(value);
this.setState({ user: user });
}
}
componentWillUnmount() {
this._unmounted = true;
}
}
答案 1 :(得分:1)
我认为这是因为你的功能是自动执行的。
如果删除自行执行
,您应该能够访问该值var userInfo = async () => {
var value = await AsyncStorage.getItem("@user_info");
value = JSON.parse(value);
return value ;
});
由于AsyncStore.getItem
是承诺,您还可以使用.then
方法
const userInfo = () => {
AsyncStorage.getItem("@user_info").then((response) => {
console.log(response);
});
}
答案 2 :(得分:1)
您应该返回value.json()。试试这个
var userInfo = (async()=>{
var value = await AsyncStorage.getItem("@user_info");
return value.json() ;
})();
此外,AsyncStorage.getItem是一个异步函数,如果在进程中发生任何错误,则需要将其包装在try和catch中
注意:如果在未使用async显式声明的函数中使用await,则最终会出现意外的令牌语法错误。
async userInfo(){
try{
var value = await AsyncStorage.getItem("@user_info");
return value.json() ;
}
catch(e){
console.log('caught error', e);
// Handle exceptions
}
}