Ключ в том, чтобы понять, что axios
само по себе возвращает обещание.Таким образом, есть несколько способов приблизиться к этому.
В любом случае нет необходимости в setTimeout
.
return new Promise(function(resolve, reject) {
const URL = process.env.REACT_APP_BASE_PATH+process.env.REACT_APP_RESOURCE_CONTI;
axios(URL, {
method: 'GET',
headers: {'content-type': 'application/json', 'preferences' : ''}
}
)
.then(response=> resolve(response.data))
.catch(err => reject(err))
}
Или, альтернативно, а возможно, и более просто, просто верните сам вызов axios
, который вернет обещание и позволит вашей логике компонента обрабатывать состояние соответственно
getConti() {
const URL = process.env.REACT_APP_BASE_PATH+process.env.REACT_APP_RESOURCE_CONTI;
return axios(URL, {
method: 'GET',
headers: {'content-type': 'application/json', 'preferences' : ''}
}
)
}
Выне нужно менять логику вашего компонента (за исключением, возможно, обработки отклонений обещаний).
this.contiService.getConti().then(r => this.setState({ conti: r.data.conti }));
.then
будет обрабатывать успешное завершение вызова axios.
Вот хорошее прочтение по Promise Chaining
.В частности, см. Раздел о возврате обещаний.