前言: 在上一篇文章中,我们熟知了什么是promise,怎么去使用它,通过它的then方法来调用在不同状态下触发的两个函数。今天我将向大家介绍promise的其他的集中方法。
Promise其他的几种方法:
###如下:
一、catch方法:
get_promise('test1.txt')
.then(data => console.log('当promise切换到fulfill状态下会调用的函数'))
.catch(error =>
console.log('当promise切换到reject状态时,catch函数会被调用')
)
######注意:catch是可选的,就是说并不是必须被调用。
二、all方法:
Promise.all([promise对象1,promise对象2,promise对象3])
promise.all这个方法返回的是一个 promise对象 ,当all参数中的数组中的所有元素都resolve了,会调用promise.all返回的promise对象的then方法。
如:
Promise.all([promise对象1,promise对象2,promise对象3]).then(function() {
参数数组中的每一个元素都resolve了,这个函数才会被调用
})
部分人可能听到参数是个数组这块可能会是一头雾水,在这我给大家举个实例。
let array = [
promise_1('test_1.txt'),
promise_2('test_2.txt'),
promise_3('test_3.txt')
]
promise.all(array).then(data=>{
console.log(data)
//值得注意的是,这里的data是一个数组,因为之前all的参数是一个数组,data这个数组中的每一个元素都是对应位置promise对象返回的结果
})
**若此时Promise.all的参数数组中有一个Promise对象reject,那么将返回这个rejected 的 Promise对象。通过.then可以拿到reject之后的值。
三、race方法:
race方法其实是和all方法有相似之处。
Promise.race([promise对象1,promise对象2,promise对象3])
在这里,我们会得到这个数组中第一个resolve的对象
如:
Promise.race(array).then(data => {
console.log(data)
})
***之所以说它与all方法是有相似的,是因为他们的参数都是一个数组,不同之处是all的方法是全都resolve之后,程序才继续执行;而race方法是只要是数组中的众多promise对象,有一个resolve了,程序就会继续执行,此时传入then中的参数data,就是一个对象,那个resolve元素的promise对象的resolve的结果。(注意是resolve 的结果。)
另外补充一点就是,Promise的异常不会,我们一般只用catch;然后我们也可以在Promise内部通过Try、catch来捕获异常。(这个问题来自于大厂的面试。)