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

为什么Promise.all().then()仍然使输出同步?

Promise.all().then()仍然使输出同步的原因是因为Promise.all()方法返回的是一个新的Promise对象,该Promise对象会在所有传入的Promise对象都变为resolved状态后才会变为resolved状态。而.then()方法是在Promise对象变为resolved状态后执行的回调函数,因此.then()方法中的代码会在所有传入的Promise对象都变为resolved状态后才会执行。

具体来说,Promise.all()方法接收一个由多个Promise对象组成的数组作为参数,并返回一个新的Promise对象。这个新的Promise对象会在数组中的所有Promise对象都变为resolved状态后才会变为resolved状态,或者在数组中的任何一个Promise对象变为rejected状态后立即变为rejected状态。

当Promise.all()方法返回的新的Promise对象变为resolved状态后,.then()方法中的回调函数会被添加到微任务队列中,等待执行。由于微任务队列中的任务会在当前任务执行完毕后立即执行,因此.then()方法中的回调函数会在当前任务执行完毕后立即执行,即使.then()方法在代码中的位置在Promise.all()方法之后。

总结起来,Promise.all().then()仍然使输出同步是因为Promise.all()方法返回的新的Promise对象会在所有传入的Promise对象都变为resolved状态后才会变为resolved状态,而.then()方法中的回调函数会在新的Promise对象变为resolved状态后立即执行。

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

相关·内容

细说JS异步发展历程

知其然知其所以然,首先了解三个概念: 1.什么是同步? 所谓同步,就是在发出一个"调用"时,在没有得到结果之前,该“调用”就不返回。但是一旦调用返回,就得到返回值了。...3.JavaScript 中为什么需要异步? 首先我们知道JavaScript是单线程的(即使新增了webworker,但是本质上JS还是单线程)。同步代码意味着什么呢?...那么我们看看Promise是如何解决回调地狱问题的,仍然以上文的readFile 为例(先读取A文本内容,再根据A文本内容读取B再根据B的内容读取C)。...的方法,对于这个需求,我们可以使用 Promise.all 来实现。...2; t.next(3); //b输出3; t.next(4); //c输出4; t.next(5); //d输出5; 为了让大家更好的理解上面代码是如何执行的,我画了一张图,分别对应每一次的next

2.3K21

停止在 JavaScript 中使用 Promise.all()

{ console.log('被拒绝,原因如下:', result.reason) } }) }) ------控制台输出...------ // 输出 // 成功取得值:成功 1 // 因为原因被拒绝:错误 2 // 成功取得值:成功 3 它通常用于处理不互相依赖的异步操作,你想知道每一个的结果。...为什么 Promise.allSettled() 更出色 总的来说,使用 Promise.allSettled() 而不是 Promise.all() 在大多数常见情况下都有其优势: 全面的结果信息 如果...增强的用户体验 通常,为用户提供必要的部分结果和错误通知要比使用某些通用消息使整个操作失败更好。Promise.allSettled() 使这种方法易于实施。...展示 Promise.allSettled() 和 Promise.all() 的不同之处: 场景一:数据同步和错误处理 假设我们数据同步任务,需要从多个外部数据源获取数据并进行处理。

8610

Promise.all的深入理解「建议收藏」

目前有两种答案: 应该是同步执行的,但是这样就有效率问题了,如果想改成异步执行怎么办呢? 有些人认为结果是按顺序执行的,有些人认为结果顺序不确定。...但是根据结果来说,它们是异步的,互相之间并不阻塞,每个任务完成时机是不确定的,尽管如此,所有任务结束之 后,它们的结果仍然是按顺序地映射到resultList里,这样就能和Promise.all里的任务列表...深入理解Promise.all() *可能看到这里有些人没有清楚,为什么返回一个数组?...通过输出结果我们能够看出返回的数组内的数据都为undefined。我们就要找出这个原因,那就是找到了为什么要使用箭头函数。...(results) { //then方法不会被执行 console.log(results); }).catch(function (e){ //catch方法将会被执行,输出结果为

1.2K10

promise.all和promise.race

bug收集:专门解决与收集bug的网站 网址:www.bugshouji.com 今天为大家分享下:Promise 中的 all 与 race 两个方法 01 promise.all 方法 Promise.all...值得注意的是,返回的数组结果顺序不会改变,即使P2的返回要比P1的返回快,顺序依然是P1,P2 示例1: 如果参数中包含非 promise 值,这些值将被忽略,但仍然会被放在返回数组中(如果 promise...([p1, p2, p3]).then(values => { console.log(values); // [3, 1337, "foo"] }); 示例2:Promise.all 的异步和同步...Promise.all 当且仅当传入的可迭代对象为空时为同步, var p = Promise.all([]); // will be immediately resolved var p2 = Promise.all...empty setTimeout(function(){ console.log('the stack is now empty'); console.log(p); }); // 输出结果

48920

Salesforce Javascript(一) Promise 浅谈

这让异步方法可以像同步方法那样返回值,但并不是立即返回最终执行结果,而是一个能代表未来出现的结果的promise对象。...方法中我们声明了一个Promise,在函数中,调用了 resolve,为了模拟异步操作,使用定时器模拟一下,然后调用 then函数去打印输出。...上图中我们还截图了Promise的方法,Promise原型的方法返回的仍然是 Promise,有三个方法可供选择:then/ catch/ finally。举个例子更好的了解。...上传到 static resource以后,如何引入使之在lwc中有效呢?下面的步骤展示如何加载css或者js资源的步骤。 1....Promise.all方法详情可以查看上面的连接。我们只需要 renderedCallback调用 Promise.all即可。

72520

2024年2月前端资讯动态:JSR新仓库革新及Set方法等全新特性

然而,尽管包管理器领域经历了诸如yarn、pnpm等诸多创新,包仓库领域的创新却相对较少,仍然以npm仓库为核心。而JSR的出现,正是为了在这一领域带来新的变革。..., 20, 25] console.log(ages); // 输出: [10, 15, 20, 25] (原数组未改变) 为什么选择 Array.prototype.with() 在之前,我们可能需要使用...Promise.allSettled():在一个数据同步任务中,你需要尝试从多个数据源同步数据,即使某些源失败了,你也希望知道哪些成功了,哪些失败了,以进行相应的处理。...: "二" }); 通过这些集合方法,JavaScript 开发者可以更加灵活和有效地处理多个异步操作,使代码更加简洁和可维护。...这就是为什么Tempo这样的日期和时间库变得尤为重要。

17710

Promise.all在统计WebHDFS时的使用

Promise.all 只会在所有传给他的 Promise 都 resolve 了之后才会 resolve,如果其中的一个 reject 了,那么 Promise.all 后面的 then 就不会被执行...,catch 会被执行 这样的话,一旦某个小时的日志请求失败了(reject),那么.then里的操作就没法执行了,如何让 Promise.all 坦然面对失败呢?...有一天有100个人来找你办业务,你有两种选择: 同步操作:让这100个人排好队,一个办完再办下一个。...异步操作:把写好标号的100张便利贴发给这100个人,让他们再返还给你,你根据便签上写的业务,异步来办理,最后把办理好的结果,按序号排好,给办理人 Promise.all就是你,Promise.all...尽管如此,所有任务结束之后,它们的结果仍然是按顺序地映射到resultList里,这样就能和Promise.all里的任务列表[asyncTask(1),asyncTask(2),asyncTask(3

1.3K30

ES6之Promise

为什么 JS 是单线程的?作为浏览器脚本语言,JavaScript 的主要用途是与用户互动,以及操作 DOM 。这决定了它只能是单线程,否则会带来很复杂的同步问题。...同步:只有前一个任务执行完毕,才能执行后一个任务 异步:当同步任务执行到某个 WebAPI 时,就会触发异步操作,此时浏览器会单独开线程去处理这些异步任务。...关于同步任务和异步任务忘深点去讲就是一次脚本执行后会按照顺序执行完成所有同步任务,而后所有异步任何会进入Event Queue, 按照Event Loop运行规则进行一次一次Loop取出任务进行线程执行...回调地狱,代码难以维护, 常常第一个的函数的输出是第二个函数的输入这种现象promise可以支持多个并发的请求,获取并发请求中的数据这个promise可以解决异步的问题,本身不能说promise是异步的...Promise.all() > Promise.all 生成并返回一个新的 Promise 对象,所以它可以使用 Promise 实例的所有方法。

71620

回调地狱解决方案之Promise

为什么出现Promise 在javascript开发过程中,代码是单线程执行的,同步操作,彼此之间不会等待,这可以说是它的优势,但是也有它的弊端,如一些网络操作,浏览器事件,文件等操作等,都必须异步执行...我的理解: Promise使回调函数可以规范的链式调用 Promise原理与讲解 原理 Promise的三种状态 pending:进行中 fulfilled :执行成功 rejected :执行失败...promise =Promise.resolve("hello world"); promise.then(function(result){ console.log(result); //输出结果...Promise.all(常用api) 多个promise需要执行的时候,可以使用promise.all方法统一声明,该方法可以将多个Promise对象包装成一个Promise。...); 代码分析: promise.all对多有执行结果做一个包装传给了then promise.all中的执行顺序是怎么样的,Promise的执行顺序是从被创建开始的,也就是在调用all的时候,==所有的

1.3K30

如何更好的编写async函数

在async/await支持度还不是很高的时候,大家都会选择使用generator/yield结合着一些类似于co的库来实现类似的效果 async函数代码执行是同步的,结果返回是异步的 async函数总是会返回一个...Promise的实例 这点儿很重要 所以说调用一个async函数时,可以理解为里边的代码都是处于new Promise中,所以是同步执行的 而最后return的操作,则相当于在Promise中调用resolve...getNumber()') return 1 } getNumber().then(_ => console.log('resolved')) console.log('done') // 输出顺序...setTimeout(_ => resolve(uid), 1000) }) } await getUsersInfo() 这样的执行好像并没有什么问题,我们也会得到1、2、3三条log的输出...为什么在使用Generator+co时没有这个问题 在使用koa1.x的时候,我们直接写yield [].map是不会出现上述所说的串行问题的 看过co源码的小伙伴应该都明白,里边有这么两个函数(删除了其余不相关的代码

1.2K10
领券