首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我的'then‘promise chaining keep执行,即使我已经发送了响应?

在使用Promise进行异步操作时,可以通过.then()方法进行链式调用,以确保在前一个Promise完成后执行下一个操作。然而,即使在已经发送了响应的情况下,Promise链仍然会继续执行的原因可能有以下几种可能性:

  1. 异步操作的执行顺序:Promise链中的每个.then()方法都会返回一个新的Promise对象,该对象表示前一个操作的结果。即使前一个Promise已经完成并返回了响应,后续的Promise仍然会按照链式调用的顺序执行,以确保操作的顺序性和一致性。
  2. Promise链中的操作是独立的:每个Promise链中的操作都是独立的,它们不会受到前一个操作的影响。即使前一个操作已经完成,后续的操作仍然会按照链式调用的顺序执行,以确保每个操作都能够得到正确的结果。
  3. Promise链中的操作可能包含异步操作:即使已经发送了响应,但后续的Promise链中的操作可能包含了一些异步操作,这些操作可能需要一定的时间才能完成。因此,即使已经发送了响应,Promise链仍然会继续执行,直到所有操作都完成。

总结起来,Promise链的执行不仅仅取决于前一个操作是否已经完成,还取决于链中的每个操作是否包含异步操作以及它们的执行顺序。这样设计的目的是为了确保操作的顺序性和一致性,以及处理复杂的异步操作流程。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

盘点JavaScript中Promise高级用法

大家好,进阶学习者。 一、前言 有一系列异步任务要一个接一个地执行 — 例如,加载脚本。如何写出更好代码呢? Promise 提供了一些方案来做到这一点。...新手常犯一个经典错误:从技术上讲,也可以将多个 .then 添加到一个 promise 上。但这并不是 promise 链(chaining)。...为了读取完整响应,应该调用 response.text() 方法:当全部文字(full text)内容从远程服务器下载完成后,它会返回一个 promise,该 promise 以刚刚下载完成这个文本作为...下面这段代码向 user.json 发送请求,并从服务器加载该文本: fetch('/article/promise-chaining/user.json') // 当远程服务器响应时,下面的 .then...即使现在不打算对链进行扩展,但之后可能会需要。

1.1K20

文加图, 理解Http请求与响应

TCP连接中我们比较熟悉就是三次握手, 但是为什么是三次而不是两次或四次呢? 这里想到了一个比喻来让大家明白. 敌人封锁江面, 我方间谍和联络员只能通过电报机隔着江面交流....但是那时电报机质量不稳定, 有可能会出现失灵情况. 所以就出现了如下对话: 间谍: 联络员, 你能收到我的话么? 你要是能收到, 就说明这个电报机可以发电报....联络员: 间谍, 收到你的话了, 这说明电报机可以收. 但是不确定电报机能不能, 你能收到我这句话么? 你要是能收到, 就说明电报机是可以发电报....间谍: 联络员, 收到你的话了. 电报机也是能能收, 我们可以正式交流情报了....之后浏览器发送了一空白行来通知服务器, 表示它已经结束了该头信息发送.

1.3K20

解析一次完整HTTP请求与响应

为什么要三次握手 为了防止已失效连接请求报文段突然又传送到了服务端,因而产生错误。...1,“同意”你关闭请求; 第三次分手:主机2向主机1送FIN报文段,请求关闭连接,同时主机2进入LAST_ACK状态; 第四次分手:主机1收到主机2FIN报文段,向主机2送ACK报文段,然后主机...为什么要四次分手 TCP协议是一种面向连接、可靠、基于字节流运输层通信协议。...TCP是全双工模式,这就意味着,当主机1出FIN报文段时,只是表示主机1已经没有数据要发送了,主机1告诉主机2,它数据已经全部发送完毕了;但是,这个时候主机1还是可以接受来自主机2数据;当主机2返回...ACK报文段时,表示它已经知道主机1没有数据发送了,但是主机2还是可以发送数据到主机1;当主机2也发送了FIN报文段时,这个时候就表示主机2也没有数据要发送了,就会告诉主机1,也没有数据要发送了,之后彼此就会愉快中断这次

1.5K40

一次完整HTTP请求与响应涉及哪些知识?

为什么要三次握手 为了防止已失效连接请求报文段突然又传送到了服务端,因而产生错误。...1,“同意”你关闭请求; 第三次分手:主机2向主机1送FIN报文段,请求关闭连接,同时主机2进入LAST_ACK状态; 第四次分手:主机1收到主机2FIN报文段,向主机2送ACK报文段,然后主机...为什么要四次分手 TCP协议是一种面向连接、可靠、基于字节流运输层通信协议。...TCP是全双工模式,这就意味着,当主机1出FIN报文段时,只是表示主机1已经没有数据要发送了,主机1告诉主机2,它数据已经全部发送完毕了;但是,这个时候主机1还是可以接受来自主机2数据;当主机2返回...ACK报文段时,表示它已经知道主机1没有数据发送了,但是主机2还是可以发送数据到主机1;当主机2也发送了FIN报文段时,这个时候就表示主机2也没有数据要发送了,就会告诉主机1,也没有数据要发送了,之后彼此就会愉快中断这次

42050

一次完整HTTP请求与响应涉及了哪些知识?

为什么要三次握手 为了防止已失效连接请求报文段突然又传送到了服务端,因而产生错误。...1,“同意”你关闭请求; 第三次分手:主机2向主机1送FIN报文段,请求关闭连接,同时主机2进入LAST_ACK状态; 第四次分手:主机1收到主机2FIN报文段,向主机2送ACK报文段,然后主机...为什么要四次分手 TCP协议是一种面向连接、可靠、基于字节流运输层通信协议。...TCP是全双工模式,这就意味着,当主机1出FIN报文段时,只是表示主机1已经没有数据要发送了,主机1告诉主机2,它数据已经全部发送完毕了;但是,这个时候主机1还是可以接受来自主机2数据;当主机2返回...ACK报文段时,表示它已经知道主机1没有数据发送了,但是主机2还是可以发送数据到主机1;当主机2也发送了FIN报文段时,这个时候就表示主机2也没有数据要发送了,就会告诉主机1,也没有数据要发送了,之后彼此就会愉快中断这次

55140

一次完整HTTP请求与响应涉及了哪些知识?

为什么要三次握手 为了防止已失效连接请求报文段突然又传送到了服务端,因而产生错误。...告诉主机1,“同意”你关闭请求; 第三次分手:主机2向主机1送FIN报文段,请求关闭连接,同时主机2进入LAST_ACK状态; 第四次分手:主机1收到主机2FIN报文段,向主机2送ACK...为什么要四次分手 TCP协议是一种面向连接、可靠、基于字节流运输层通信协议。...TCP是全双工模式,这就意味着,当主机1出FIN报文段时,只是表示主机1已经没有数据要发送了,主机1告诉主机2,它数据已经全部发送完毕了;但是,这个时候主机1还是可以接受来自主机2数据;当主机2返回...ACK报文段时,表示它已经知道主机1没有数据发送了,但是主机2还是可以发送数据到主机1;当主机2也发送了FIN报文段时,这个时候就表示主机2也没有数据要发送了,就会告诉主机1,也没有数据要发送了,之后彼此就会愉快中断这次

65450

字节跳动最爱考前端面试题:计算机网络基础

但是之后这个包如果到达了服务端,那么服务端接收到了,然后发送相应数据表,就建立了链接,但是此时客户端已经关闭连接了,所以带来了链接资源浪费。 为什么不是四次?...,就表明 ACK 成功到达,挥手结束,客户端变为 CLOSED 状态,否则进行 ACK 重发 为什么需要等待 2MSL(Maximum Segement Lifetime): 因为如果不等待的话,如果服务端还有很多数据包要给客户端...在 HTTP 中响应 Connection 字段指定为 keep-alive 你对 TCP 滑动窗口有了解嘛?...通过在头部(请求和响应头)设置 Connection: keep-alive,HTTP1.0协议支持,但是默认关闭,从HTTP1.1协议以后,连接默认都是长连接 HTTP 一般会有 httpd 守护进程.../post/5d032b77e51d45777a126183 喜欢本文,点个“在看”告诉 ?

81720

有哪些前端面试题是必须要掌握

没想出其他用处就直接答不知道了,还可以利用 symbol 不会被常规方法(除了 Object.getOwnPropertySymbols 外)遍历到,所以可以用来模拟私有变量。...;})promise.catch(console.err)输出结果如下:Uncaught (in promise) TypeError: Chaining cycle detected for promise...然后会发送 ACK 包,并进入 CLOSE_WAIT 状态,此时表明客户端到服务端连接已经释放,不再接收客户端数据了。但是因为 TCP 连接是双向,所以服务端仍旧可以发送数据给客户端。...,为什么?...管道(pipeline)网络传输是指:可以在同一个 TCP 连接里面,客户端可以发起多个请求,只要第一个请求发出去了,不必等其回来,就可以第二个请求出去,可以减少整体响应时间。

35620

35 - Promises:链式、错误处理和运算符​

原文:https://dev.to/bhagatparwinder/promises-chaining-error-handling-operators-3ccb 上篇文章详细介绍了什么是 promise...错误处理 在 promise 链式中有两种方法可以处理错误,要么在 then 块中传入错误处理器或者使用 catch 操作符。我们已经在前一篇文章中讨论了第一种方法。...这也是为什么最后两个打印没有执行。 catch 操作符并不总是必须添加到最后,它可以添加到链式中间然后可以捕获到它那个位置之前错误。...Promise.all 当你在一个异步操作后执行另一个(串行),promise 链式调用很顺手。经常,你需要多个异步操作并行执行而不是等一个执行完成后再执行。...注意: Promise.all 中即使有一个错误产生,整个结果都会失败。

41030

HTTP和HTTPS协议,看一篇就够了

大家好,又见面了,是你们朋友全栈君。...比如某个客户机在短时间多次请求同一个资源,服务器并不能区别是否已经响应过用户请求,所以每次需要重新响应请求,需要耗费不必要时间和流量。...TCP是全双工模式,当client发出FIN报文段时,只是表示client已经没有数据要发送了,client告诉server,它数据已经全部发送完毕了;但是,这个时候client还是可以接受来server...数据;当server返回ACK报文段时,表示它已经知道client没有数据发送了,但是server还是可以发送数据到client;当server也发送了FIN报文段时,这个时候就表示server也没有数据要发送了...,就会告诉client,也没有数据要发送了,如果收到client确认报文段,之后彼此就会愉快中断这次TCP连接。

29010

高级前端二面常见面试题总结_2023-02-27

为什么要使用keep-alive keep-alive技术创建目的,能在多次HTTP之前重用同一个TCP连接,从而减少创建/关闭多个 TCP 连接开销(包括响应时间、CPU 资源、减少拥堵等),参考如下示意图...{: 1} 代码执行过程如下: 首先会进入Promise,打印出3,之后进入下面的Promise,打印出7; 遇到了定时器,将其加入宏任务队列; 执行Promise p中resolve...; 执行外面的代码,打印出4; 这样第一轮宏任务就执行完了,开始执行微任务队列中任务,先后打印出1和2; 这样微任务就执行完了,开始执行下一轮宏任务,宏任务队列中有一个定时器,执行它,打印出5,由于执行已经变为...输出结果如下: Uncaught (in promise) TypeError: Chaining cycle detected for promise # 这里其实是一个坑,.then...如果已经访问过页面并且资源已经进行离线存储了,那么浏览器就会使用离线资源加载页面,然后浏览器会对比新 manifest 文件与旧 manifest 文件,如果文件没有发生改变,就不做任何操作,如果文件改变了

86520

拿到大厂前端offer前端开发是怎么回答面试题

一个 tcp 连接能几个 http 请求?...首部,在请求头带上 Connection: Keep-Alive,并且可以通过 Keep-Alive 通用首部中指定,用逗号分隔选项调节 keep-alive 行为,如果客户端和服务端都支持,那么其实也可以发送多条...$set() 解决对象新增属性不能响应问题 ?你能说说如下代码实现原理么?1)Vue为什么要用vm....;执行外面的代码,打印出4;这样第一轮宏任务就执行完了,开始执行微任务队列中任务,先后打印出1和2;这样微任务就执行完了,开始执行下一轮宏任务,宏任务队列中有一个定时器,执行它,打印出5,由于执行已经变为...,此时已经输出了1和7。

30380

20道前端高频面试题(附答案)

例如下图中两个请求, 请求一送了所有的头部字段,第二个请求则只需要发送差异数据,这样可以减少冗余数据,降低开销。 typeof null 结果是什么,为什么?...代表想要获取数据done 布尔值,false表示当前指针指向数据有值,true表示遍历已经结束Iterator 作用有三个:创建一个指针对象,指向当前数据结构起始位置。...代码如下:Promise.reject(new Error(“错了,请原谅俺!!”))...;就是下面的代码new Promise简单形式:new Promise(function(resolve,reject){ reject(new Error("错了!"))...(4)race()race方法和all一样,接受参数是一个每项都是promise数组,但是与all不同是,当最先执行事件执行完之后,就直接返回该promise对象值。

54930

理清 HTTP 之下 TCP 流程,让你 HTTP 水平更上一层

那么为什么握手是三次,挥手是四次呢?...刷新浏览器,请求了两次,发现经历了两次连接建立、http 请求响应、连接断开: 这是因为设置了 Connection:close header,它作用就是一次 http 请求响应结束就断开...重启服务器,再刷新下浏览器试试: 可以看到在一个 TCP 连接内发送了多次 http 请求响应。(通过 SYN 开始,FIN 结束) 这就是 keep-alive 作用。...这样,我们就理清了 HTTP 在 TCP 层面的流程,连接建立、断开,请求响应,还有 keep-alive。...知道了为什么不能三次挥手(因为两个 ACK 冲突了) 然后还理清了同一个 TCP 连接传输多个 HTTP 请求响应是通过 seq number 和 ack number 来关联

26420

从一道让失眠 Promise 面试题开始,深入分析 Promise 实现细节

success 3 Chaining cycle detected for promise # 哈哈,搞定 ?...那么问题来了 为什么我们 Promise A+ 测试全部通过手写代码,执行结果却与原生 Promise 不同? 在我们手写代码使用创建一次微任务方式,会带来什么问题吗?...ES6 中 Promise 虽然是遵循 Promise A+ 规范实现,但实际上也 Promise A+ 上做了一些功能扩展,例如:Promise.all、Promise.race 等,所以即使都符合...不得不去翻看更多相关文章,发现有些人会为了让执行结果与原生相同,强行去再多加一次微任务,这种做法是很牵强。...这个在掘金中一篇文章 以为很懂 Promise,直到我开始实现 Promise/A+规范[6] 也有一段关于这道面试题讨论 return Promise.resolve(4),JS 引擎会安排一个

1.2K40

企业神奇中间件-RPC(总览) No.97

一次 HTTP 请求 客户端:你准备好要发送了啊。 服务端:好吧你发送吧。 客户端:你真的准备好真的要发送了啊。 客户端:发送请求。 服务端:响应请求。 客户端:你准备好要关闭了啊。...服务端:关闭连接了。 客户端:好知道你关闭了。 ps: HTTP 1.0 默认不打开长连接,客户端想持有长连接要加上"Connection:keep-alive" header。...HTTP 2.0 默认打开长连接支持多路复用,即在一个连接中可发起多次请求和响应。 ---- RPC交互过程: 客户端:你准备好要发送了啊。 服务端:好吧你发送吧。...客户端:你真的准备好真的要发送了啊。 客户端:发送请求。 服务端:响应请求。 客户端:发送请求。 服务端:响应请求。 客户端:发送请求。 服务端:响应请求。...连接永远不会有连接关闭一天,除非目标机器挂了通道崩了之类。 ---- 连接打开和关闭是一个成本,虽然 HTTP 已经支持了长连接,但是抛去这些不讲,繁重 HTTP 头也是会把网络搞崩。

30210

都2019了,为何你 JavaScript 代码还如此冗长~

但是,即使是2019年了,还是需要给一些帮助你编写干净、整洁、有效、且具有扩展性代码建议。 ?...Promise也不错,但当代码规模越来越大时,它们总是有些别扭。 解决方案就是async / await,能让阅读代码变得更容易,代码变得更整洁。...实际上,Javascript中任何Promise都可以await,只要你用库能返回Promise,就可以await它。实际上,async/await只不过是promise语法糖而已。...目前,optional chaining还不是官方标准一部分,但它是个stage-1实验性功能。...如果你不知道parcel,建议你一定要试试。 9. 自己写更多代码 这一条很有意思,这个话题已经讨论过很多次了。 即使是CSS,许多人也喜欢用现成库,比如bootstrap。

80230

关于HTTP协议中保持连接

缘起 中午在群里讨论,用ab测试 一台只提供静态文件服务, 不与其他任何系统交互时候,为什么也会产生大量TIME WAIT状态。...那么,由此可以推断,在这个场景中,server是主动断开连接一方,那么server为什么会主动断开呢, 这就涉及到HTTP里关于keepalive内容了。...我们常常听说keepalive能提高webserver性能, 但是为什么呢? 这里暂且不解释,说完下面的内容,就清楚了。...可以看到, 在server响应完成后, 发送了FIN 包, 主动断开连接, 这很好理解。 在来看一个请求: GET /?...可以看到, server在响应完成后,并没有发送FIN包关闭连接, 而是一段时间后,客户端发送FIN包,关闭连接, 如果你看第二列, time会发现,正好是大约5秒后,客户端发送了FIN包, 这个数值正好是

1.9K60
领券