本人编程小白一枚,希望多多包涵~
如果阅读有疑问的话,欢迎评论或私信!!
本人会很热心的阐述自己的想法!谢谢!!!
文章目录
- 异步
- 揭示原理
- Promise.race未完待续(……)
异步
我们知道,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的结果
。