仅在前一个请求完成后才如何触发另一个请求?

时间:2020-03-26 09:48:29

标签: javascript http promise fetch

我正在向气象服务部门发出http请求。如何将它们推迟到上一个完成?我试着通过'const allow = true'开关来控制状态,但是不知何故请求不断触发。不能通过禁用按钮来完成!只是需要在'allow'为假时阻止请求。

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 :(得分:0)

我尝试将'allow = true'从'finally'块移至'then'

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

似乎在请求未完成之前,终于执行了代码块。

答案 1 :(得分:0)

此:

.finally(allow = true)

将永远无法工作,因为您需要将函数传递给.finally(),如:

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

当您不传递函数时,将立即执行代码,而不是在完成诺言后立即执行。传递函数时,可以为诺言基础结构提供一个在准备好调用函数时(稍后再调用)调用函数的机会。