让本机如何从承诺中获得回报

时间:2017-11-13 21:43:34

标签: javascript react-native ecmascript-6

我的问题是我想从这个功能得到一个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我必须做什么?

3 个答案:

答案 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
    }
}
相关问题