2016-12-21 5 views
2

Так что я пытаюсь получить все «места», если у вас есть место в React Native через API Google Places. Проблема в том, что после первого обращения к API, Google возвращает только 20 записей, а затем возвращает next_page_token, который будет добавлен к тому же вызову API url. Таким образом, я делаю еще один запрос, чтобы получить следующие 20 местоположений сразу после, но есть небольшая задержка (1-3 секунды), пока токен действительно не станет действительным, поэтому мои ошибки запроса.Функция сна для реагента-родной?

Я пытался делать:

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

Но это полностью игнорируется приложением ... какие-то предложения?

Update

Я делаю это в моей componentWillMount функции (после определения переменных, конечно), и вызвать setTimeout сразу после этой строки.

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

}); 
+0

Не могли бы вы отобразить еще один код? – Chase

+0

Где вы звоните setTimeout()? – abeikverdi

+0

@Chase обновил вопрос, извините, что. – LukeCage

ответ

3

Я понял, что вы пытаетесь сделать выборку на основе результата другой выборки. Итак, ваше решение заключается в том, чтобы использовать TimeOut, чтобы догадаться, когда запрос будет завершен, а затем выполнить другой запрос, не так ли?

Если да, возможно, это не лучшее решение вашей проблемы. Но следующий код, как я могу сделать, чтобы использовать время ожидания:

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

Подход, который я бы это подождать, пока не принести отделки, то я хотел бы использовать функцию обратного вызова к тому же снова принести с различными параметрами, в вашем случае , nextPageToken. Я делаю это, используя синтаксис ожидания ES7 async &.

// 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 
    } 
} 

Если я что-то не понял или у вас возникли вопросы, не стесняйтесь спрашивать!

Надеюсь, это поможет.

+0

Должно быть установленоTimeout (someMethod, 2000) – cbartondock

+0

Вы правы! Спасибо, что заметили это. –

Смежные вопросы