本文假设你已经学习过了几篇Promises的文章,包括学习了我写的《我对Promises的理解》。
串联、并联和混联都是物理学的电路里的名词,希望你还没有忘记这几个词。
简述串联和并联
串联也就是then链条,这个没什么可说的,一路then下去就可以了。
并联也简单,我们知道Promise.all()和Promise.race()能解决promise并联的问题。
混联
混联就有意思了。举个例子:
案例1
假设,同时并发2个ajax,每个请求获得结果之后,各自再来一次ajax,每个请求获得结果之后,再各自来一次ajax,获得结果之后,把两个结果相加,最后把之和再来一次ajax,获得结果之后结束。
这个案例也就是:
A -> A1 -> A2 ----------↓
做加法 --->C
B -> B1 -> B2 ----------↑
解决方案:非常简单,new两个Promise对象,各then两步,然后Promise.all()一次,把结果相加,然后再then一次就完事。
案例2
这次有支路。比如从A1并发两个后续ajax,其中一个是A2没错,另一个是A2.5。A2.5又有后续A3.5,然后A3.5的结果也参与到做加法。
解决方案:A1之后的then,创建2个promise对象,再算上B路线的对象,所以Promise.all()传入3个对象。
案例3
修改案例2,其中A3.5不参与加法计算,也就是形成了盲端。
解决方案:盲端意味着它的成功与失败都不妨碍别的线路,那么它就正常写,只是不要执行.reject()或者resolve()就可以了。