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

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) => {

我正在向气象服务发出http请求。如何将它们推迟到上一个完成之后?我尝试使用“const allow=true”开关来控制状态,但不知何故,请求一直在触发。这不应该通过禁用按钮来完成!只需在“允许”为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)
请看完整的代码

我尝试将'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()
中执行更好,就像您最初尝试的那样,但将其放在回调函数中,就像我在回答中显示的那样。