繁体   English   中英

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

[英]react native how to get return from a promise

我的问题是我想从这个函数得到一个json,但我得到的只是一个承诺,为什么我选择这种方式,因为在我正在努力的应用程序它动态地工作,但我看到的唯一的地方我可以把这个承诺是渲染()

这是我的代码:

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我该怎么办?

您必须从componentDidMount调用此函数,并在promise完成后调用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;
  }
}

我认为这是因为你的功能是自动执行的。

如果删除自执行,则应该能够访问该值

var userInfo = async () => {
    var value = await AsyncStorage.getItem("@user_info");
    value = JSON.parse(value);
    return value ;
  });

由于AsyncStore.getItem是一个Promise,你也可以使用.then方法

const userInfo = () => {
  AsyncStorage.getItem("@user_info").then((response) => {
     console.log(response);
  });
}

你应该返回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
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM