Promise的作用

promise是什么?

主要用于异步计算,可以将异步操作队列化,将异步操作以同步的操作的流程表达出来,按照期望的顺序进行执行。

我的问题

需求:

//调用第一个接口获得返回值
crudDept.getAlloVege(Cookies.get('deptId')

//调用第二个接口获取返回值
crudDept.getNotAlloVege(Cookies.get('deptId')

//获取两个接口返回值的合并
this.data = dataC.concat(dataN)

出现问题

如果什么都不操作,那么两个接口的调用是异步操作,那么响应顺序就是不可控的,返回的结果也是不可控的。就很难受。

解决办法

 Promise.all([crudDept.getAlloVege(Cookies.get('deptId')), 
 crudDept.getNotAlloVege(Cookies.get('deptId'))]).then(res => {
    
    
 res[0]....
 res[1]...
 //即可获取两个接口调用的返回值
 //然后就可以拿到自己想要的结果
 
 }

总结

用promise让异步操作,按照同步操作的流程去执行,得到自己想要的结果。

promise的其它内容

三个状态

1、pending[待定]初始状态
2、fulfilled[实现]操作成功
3、rejected[被否决]操作失败

Promise对象的状态改变,只有两种可能:
从pending变为fulfilled
从pending变为rejected。
promise状态一经改变,不会再变。
当promise状态发生改变,就会触发then()里的响应函数处理后续步骤;

.then

1、接收两个函数作为参数,分别代表fulfilled(成功)和rejected(失败)
2、.then()返回一个新的Promise实例,所以它可以链式调用
3、当前面的Promise状态改变时,.then()根据其最终状态,选择特定的状态响应函数执行
4、状态响应函数可以返回新的promise,或其他值,不返回值也可以我们可以认为它返回了一个null;
5、如果返回新的promise,那么下一级.then()会在新的promise状态改变之后执行
6、如果返回其他任何值,则会立即执行下一级.then()
.then()里面有.then()的情况
1、因为.then()返回的还是Promise实例
2、会等里面的then()执行完,再执行外面的

Promise的catch方法

catch 方法是 then(onFulfilled, onRejected) 方法当中 onRejected 函数的一个简单的写法,也就是说可以写成 then(fn).catch(fn),相当于 then(fn).then(null, fn)使用 catch 的写法比一般的写法更加清晰明确,其实可以类比成try/catch,这样,其中有报错的地方不会阻塞运行。比如定义了一个未定义wawa,正常来说它上面的代码也不会运行,因为被这个报错阻塞了,有了catch,它上面的代码可以正常运行下去

Promise的all方法

Promise.all可接受一个元素为Promise对象的数组作为参数,当这个数组里面的所有Promise对象都变为resolve时,该方法才会返回。

Promise的race方法

race的意思为赛跑,因此,promise.race也是传入一个数组,但是与promise.all不同的是,race只返回跑的快的值,也就是说result返回比较快执行的那个。

猜你喜欢

转载自blog.csdn.net/weixin_49173037/article/details/120377932