前言:
虽然现在大环境不好,经济下滑,甚至前段时间还有“前端已死”的说法。但是网络所传递的消息,从来都不能尽信,很多言论太过于片面,从我自己的角度理解,不过是前端岗位从最开始的浪潮开始逐渐过渡到平稳期,企业对于人才筛选以及成本的控制,越来越严格。所以结合自身的情况,我去参加了几场面试,下面是对个人基础的巩固。
promise.all
面试官:常用的promise方法有哪些?
我:随口就来,Promise.all,Promise.any,Promise.race等等
问题:
1.promise.all运用到什么场景?多个请求发送的时候,若其中一个请求失败,那么剩余的请求会不会被中断?
2.promise.all其中一个请求失败后?返回的结果是什么?(有一个坑)
promise.all的概念
p的状态取决于p1,p2,p3,仅p1,p2,p3都成功的时候,p状态才为成功,返回值为三个p的返回值所组成的数组;
反之,若有一个p存在rejected,则p.all的状态为reject,返回值是第一个被rejected的返回值
例题
1.在请求包含自己的catch方法时,若请求报错,promise.all的结果是什么?
2.若单独的请求执行了reject,但没有自己的catch
3.所有请求都成功
结果分析:
1.p2存在catch的情况:会返回所有请求的返回值,分别包含失败的和成功的。因为单独的P2有自己的catch,且p2返回的是一个新的实例,在执行完P2的catch过后,还是会执行这个新实例的resolve
2.p2不存在catch的情况,p.all的返回状态就是reject,且会执行catch,返回值就是第一个被reject的请求的返回值
3.全部请求成功,p.all返回的是所有请求成功的返回值
4.若其中某个请求失败,并不会中断其余请求(p1,p2,p3几乎是同时发送请求的)【这个我暂时没找到答案,==】
promise.race
1.失败的请求,没有自身的catch捕获
2.失败请求存在catch捕获
结果分析:
不管promise是成功还是失败,最先返回的值,会作为p的返回值。
但若promise自身存在then或catch,则不管它是resolve还是reject,最终执行完成后都会返回一个resolve的promise新实例,以至于p最终都会执行then,而不是catch