所以我试图抓住所有地方'通过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 });
});
答案 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
)
);
}