Как запустить другой запрос только после завершения предыдущего? - PullRequest
1 голос
/ 26 марта 2020

Я делаю http запросы в службу погоды. Как мне отложить их до завершения предыдущего? Я попытался сделать переключатель const allow = true для управления состоянием, но почему-то запросы продолжают срабатывать. Это не должно быть сделано путем отключения кнопки! Просто нужно предотвращать запросы, пока «allow» имеет значение false.

fetch('http://localhost:3001/weather?address=' + location)
                .then(res => res.json())
                .then((data) => {
                    if (data.error) {
                        messageOne.textContent = data.error
                    } else {
                        messageOne.textContent = data.location
                        messageTwo.textContent = data.forecast
                    }
                }).finally(allow = true)

Пожалуйста, смотрите полный код https://jsfiddle.net/pgdf4msa/2/

Ответы [ 2 ]

0 голосов
/ 26 марта 2020

Это:

.finally(allow = true)

никогда не будет работать, потому что вам нужно передать функцию в .finally() как в:

.finally(() => {allow = true})

Когда вы не передаете функцию, код выполняется сразу, а не позже, когда обещание выполнено. Когда вы передаете функцию, вы даете инфраструктуре обещания шанс вызвать функцию, когда она будет готова к вызову функции (некоторое время спустя).

0 голосов
/ 26 марта 2020

Я попытался переместить 'allow = true' из блока 'finally' в 'then'

.then((data) => {
                    if (data.error) {
                        messageOne.textContent = data.error
                    } else {
                        messageOne.textContent = data.location
                        messageTwo.textContent = data.forecast
                        allow = true
                    }
                })

Кажется, что в конце концов блок был выполнен до того, как запрос завершился.

...