我正在向气象服务部门发出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/
答案 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})
当您不传递函数时,将立即执行代码,而不是在完成诺言后立即执行。传递函数时,可以为诺言基础结构提供一个在准备好调用函数时(稍后再调用)调用函数的机会。