一丶什么是promise
1.Promise是异步编程的一种解决方案,它有三种状态,分别是pending-进行中、resolved-已完成、rejected-已失败
2.ES6之前的promise需要引入第三方库
二丶promise的优缺点
优点:主要解决回调地狱问题,使得代码更清晰,减少嵌套数;
缺点:一旦创建,无法取消,比如点赞操作,快速点两次按钮,
特点:(1)对象的状态不受外界影响
(2)一旦创建,无法取消
三丶.then
1. .then有两个参数,第一个参数是Resolved
状态异步成功后的回调函数,第二个参数是失败后Rejected状态的回调函数;
2. .then
方法返回的是一个新的Promise
实例,可以按照次序依次调用回调函数
3. 注意:promise的抛出错误具有冒泡性质,.catch里面可以统一捕获,所以建议把错误统一写在catch里
四丶.catch
1.用于指定发生错误时的回调函数
五丶.all
1.Promise.all
方法接受一个数组作为参数,p1
、p2
、p3
都是 Promise 实例,当p1、p2、p3的状态都变成resolved时,promise才会变成resolved,并调用then()的已完成回调,但只要有一个变成rejected状态,promise就会立刻变成rejected状态
var p = Promise.all([p1, p2, p3]);
var promises = [2, 3, 5, 7, 11, 13].map(function (id) {
return getJSON('/post/' + id + ".json");
});
Promise.all(promises).then(function (posts) {
// ...
}).catch(function(reason){
// ...
});
六丶.race
1.“竞速”方法,参数与Promise.all()相同,不同的是,参数中的p1、p2、p3只要有一个改变状态,promise就会立刻变成相同的状态并执行对于的回调
七丶resolve
有时需要将现有对象转为Promise对象,Promise.resolve
方法就起到这个作用
八丶reject
Promise.reject(reason)
方法也会返回一个新的 Promise 实例,该实例的状态为rejected
。
九丶done
Promise对象的回调链,不管以then
方法或catch
方法结尾,要是最后一个方法抛出错误,都有可能无法捕捉到(因为Promise内部的错误不会冒泡到全局)。因此,我们可以提供一个done
方法,总是处于回调链的尾端,保证抛出任何可能出现的错误。
十丶finally
finally
方法用于指定不管Promise对象最后状态如何,都会执行的操作。它与done
方法的最大区别,它接受一个普通的回调函数作为参数,该函数不管怎样都必须执行。