Javascript 如何仅在前一个请求完成后触发另一个请求?
我正在向气象服务发出http请求。如何将它们推迟到上一个完成之后?我尝试使用“const allow=true”开关来控制状态,但不知何故,请求一直在触发。这不应该通过禁用按钮来完成!只需在“允许”为false时阻止请求Javascript 如何仅在前一个请求完成后触发另一个请求?,javascript,http,promise,fetch,Javascript,Http,Promise,Fetch,我正在向气象服务发出http请求。如何将它们推迟到上一个完成之后?我尝试使用“const allow=true”开关来控制状态,但不知何故,请求一直在触发。这不应该通过禁用按钮来完成!只需在“允许”为false时阻止请求 fetch('http://localhost:3001/weather?address=' + location) .then(res => res.json()) .then((data) => {
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)
请看完整的代码
我尝试将'allow=true'从'finally'块移动到'then'
.then((data) => {
if (data.error) {
messageOne.textContent = data.error
} else {
messageOne.textContent = data.location
messageTwo.textContent = data.forecast
allow = true
}
})
似乎finally块是在请求挂起之前执行的。我尝试将'allow=true'从'finally'块移动到'then'
.then((data) => {
if (data.error) {
messageOne.textContent = data.error
} else {
messageOne.textContent = data.location
messageTwo.textContent = data.forecast
allow = true
}
})
在请求挂起之前,似乎终于执行了块。这是:
.finally(allow = true)
将永远不会工作,因为您需要将函数传递给.finally()
,如下所示:
.finally(() => {allow = true})
如果不传递函数,代码将立即执行,而不是在承诺完成后执行。当您传递一个函数时,您给promise基础结构一个机会,让它在准备调用函数时(稍后某个时间)调用该函数。这:
.finally(allow = true)
将永远不会工作,因为您需要将函数传递给.finally()
,如下所示:
.finally(() => {allow = true})
如果不传递函数,代码将立即执行,而不是在承诺完成后执行。当您传递一个函数时,您会给promise基础结构一个机会,在它准备好调用函数时(稍后某个时间)调用该函数。
。最后(allow=true)
将永远无法工作。您需要将函数传递给.finally()
,如:.finally(()=>{allow=true})
。如果不传递函数,代码将立即执行。当您传递一个函数时,您会给promise基础结构一个机会,让它在功能正常并准备好调用该函数时调用该函数。。最后(allow=true)
将永远无法工作。您需要将函数传递给.finally()
,如:.finally(()=>{allow=true})
。如果不传递函数,代码将立即执行。当您传递一个函数时,您会给promise基础结构一个机会,让它在准备好调用函数时调用该函数。如果fetch()
拒绝它的承诺,这将永远不会设置allow=true
。最好像您最初尝试的那样在.finally()
中这样做,但将其放在回调函数中,如我在回答中所示。如果fetch()
拒绝了它的承诺,这将永远不会设置allow=true
。在.finally()
中执行更好,就像您最初尝试的那样,但将其放在回调函数中,就像我在回答中显示的那样。