React-Native的睡眠功能?

时间:2016-12-21 02:06:15

标签: javascript android google-maps reactjs react-native

所以我试图抓住所有地方'通过Google Places API在React Native中提供一些位置。问题是,在第一次调用API后,Google只返回20个条目,然后返回next_page_token,以附加到同一API调用url。因此,我提出另一个请求,以便立即获得接下来的20个位置,但是在令牌实际变为有效之前会有一个小的延迟(1-3秒),因此我的请求错误。

我尝试过:

this.setTimeout(() => {this.setState({timePassed: true})}, 3000);

但它完全被应用程序忽略了......有什么建议吗?

更新

我在componentWillMount函数中执行此操作(在定义变量后),并在此行后面调用setTimeout

axios.get(baseUrl)
.then((response) => {
   this.setState({places: response.data.results, nextPageToken: response.data.next_page_token });

});

2 个答案:

答案 0 :(得分:7)

我的理解是你试图根据另一次获取的结果进行获取。所以,你的解决方案是使用TimeOut猜测请求何时完成,然后再做另一个请求,对吗?

如果是,可能这不是解决问题的最佳方法。但以下代码是我如何使用超时:

// Without "this"
setTimeout(someMethod,
    2000
)

我要采取的方法是等待提取完成,然后我会使用不同的参数再次使用回调来获取相同的提取,在您的情况下,nextPageToken。我使用ES7 async& amp;等待语法。

// Remember to add some stop condition on this recursive method.
async fetchData(nextPageToken){
    try {
        var result = await fetch(URL)
        // Do whatever you want with this result, including getting the next token or updating the UI (via setting the State)
        fetchData(result.nextPageToken)
    } catch(e){
         // Show an error message
    }
}

如果我误解了某些内容或者您有任何疑问,请随时提问!

我希望它有所帮助。

答案 1 :(得分:1)

尝试一下对我有用:

  async componentDidMount() {
     const data = await this.performTimeConsumingTask();

        if (data !== null) {
       // alert('Moved to next Screen here');
    this.props.navigator.push({
        screen:"Project1.AuthScreen"})
        }
  }
  performTimeConsumingTask = async() => {
    return new Promise((resolve) =>
      setTimeout(
        () => { resolve('result') },
        3000
      )
    );
  }