Если вы используете JDK 9 или выше, CompletableFuture.orTimeout
позволит вам установить таймаут. Для более ранних версий вам необходимо реализовать это самостоятельно, возможно, путем планирования задачи, которая вызывает completeExceptionally
.
. Для ведения журнала вы можете использовать whenComplete
и проверять изменяемый аргумент, регистрируя его, если он присутствует. Примечание: в этом случае не проводится различие между таймаутами или другими отказами.
Поскольку эти 2 действия асинхронны, вам нужно соответствующим образом их обработать.
Axios get возвращает обещание. Так что вы можете вызвать второе действие в блоке then первого действия.
Кроме того, setState является aync-действием (оно ставится в очередь и не запускается мгновенно). Используйте данные, полученные от первого действия, в своем блоке then передайте его второму действию
Просто вызовите вторую функцию в блоке then()
первого и передайте данные в качестве параметра. setState
является асинхронным, поэтому вы не можете полагаться на данные, которые будут установлены немедленно.
fetchDuel = () => {
const duelID = this.props.match.params.duelID;
axios.get(`http://127.0.0.1:8000/api/duel/${duelID}`,
{'headers': {'Authorization': `Token ${localStorage.getItem('token')}`}})
.then(res => {
this.setState({
duel: res.data
});
this.fetchDataset(res.data);
});
};
Просто вызовите вторую функцию в .then()
первой функции, используя данные из ответа. Пример:
class DuelDetail extends React.Component {
state = {
duel: [],
dataset: null
};
fetchDuel = () => {
const duelID = this.props.match.params.duelID;
axios.get(`http://127.0.0.1:8000/api/duel/${duelID}`,
{'headers': {'Authorization': `Token ${localStorage.getItem('token')}`}})
.then(res => {
this.setState({
duel: res.data
});
this.fetchDataset(res.data.dataset)
// pass whatever property you get from the response here.
});
};
fetchDataset = (datasetId) => {
axios.get(`http://127.0.0.1:8000/api/dataset/${datasetId}`,
{'headers': {'Authorization': `Token ${localStorage.getItem('token')}`}})
.then(res => {
this.setState({
dataset: res.data
});
});
};
componentDidMount() {
this.fetchDuel()
}