Методы выборки зависят друг от друга

Если вы используете JDK 9 или выше, CompletableFuture.orTimeout позволит вам установить таймаут. Для более ранних версий вам необходимо реализовать это самостоятельно, возможно, путем планирования задачи, которая вызывает completeExceptionally.

. Для ведения журнала вы можете использовать whenComplete и проверять изменяемый аргумент, регистрируя его, если он присутствует. Примечание: в этом случае не проводится различие между таймаутами или другими отказами.

0
задан maslak 18 January 2019 в 17:47
поделиться

3 ответа

Поскольку эти 2 действия асинхронны, вам нужно соответствующим образом их обработать.

Axios get возвращает обещание. Так что вы можете вызвать второе действие в блоке then первого действия.

Кроме того, setState является aync-действием (оно ставится в очередь и не запускается мгновенно). Используйте данные, полученные от первого действия, в своем блоке then передайте его второму действию

0
ответ дан varoons 18 January 2019 в 17:47
поделиться

Просто вызовите вторую функцию в блоке 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);
            });
    };

0
ответ дан Chase 18 January 2019 в 17:47
поделиться

Просто вызовите вторую функцию в .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()
    }

0
ответ дан Max 18 January 2019 в 17:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: