探索Promise异步模式抽象的变体——Promise.all篇

本文解释了JavaScript中的异步编程,特别是Promise.all和Promise.race的概念,以及如何在单线程环境下实现并行执行。通过实例讲解了Promise.all如何等待所有Promise完成或任一Promise失败,并介绍了MyAjax方法的应用。
摘要由CSDN通过智能技术生成

在这里插入图片描述

本人编程小白一枚,希望多多包涵~
如果阅读有疑问的话,欢迎评论或私信!!
本人会很热心的阐述自己的想法!谢谢!!!

异步

我们知道,JavaScript是单线程模式。在异步序列中(即Promise链),任何时刻都只有一个任务正在执行——代码2只能在代码1之后,代码3只能在代码2之后。那么我们想要同时执行代码1和代码2——“并行执行”时,我们应该怎么做呢?

在计算机中,有一个称之为“门”的机制,在符合对应条件时(与、或、非),门才可以通过。它们之间的执行时间可能长短不一,执行的顺序也难以推测,但是如果只需要等全部完成才继续的话,我们可以使用Promise提供的一种方法all

揭示原理

假设有一个请求方法,我们命名为“MyAjax”,该方法可以是Promise,也可以是立即值。考虑下面一个代码:

var p1 = MyAjax("...");
var p2 = MyAjax("...");
Promise.all([p1,p2]).then({
	function fulfilled(msgs){
		console.log(msgs)//msgs是一个p1、p2请求结果的数据!
	},
	function rejected(){
	}
})

关于all的数组中参数的类型,由于在该方法本质中,都会被调用Promise.resolve()进行过滤为Promise。注意,如果本身是Promise,然后再调用Promise.resolve(),不会有额外开销的!

Promise.all返回的Promise,只有在所有Promise都完成后才会调用完成回调。如果有任何一个Promise被拒绝的话,都会被立即拒绝,并丢弃其他所有Promise的结果

Promise.race未完待续(……)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员小井

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值