一丶什么是promisejavascript
1.Promise是异步编程的一种解决方案,它有三种状态,分别是pending-进行中、resolved-已完成、rejected-已失败java
2.ES6以前的promise须要引入第三方库编程
二丶promise的优缺点json
优势:主要解决回调地狱问题,使得代码更清晰,减小嵌套数;数组
缺点:一旦建立,没法取消,好比点赞操做,快速点两次按钮,promise
特色:(1)对象的状态不受外界影响异步
(2)一旦建立,没法取消异步编程
三丶.then函数
1. .then有两个参数,第一个参数是Resolved
状态异步成功后的回调函数,第二个参数是失败后Rejected状态的回调函数;post
2. .then
方法返回的是一个新的Promise
实例,能够按照次序依次调用回调函数
3. 注意:promise的抛出错误具备冒泡性质,.catch里面能够统一捕获,因此建议把错误统一写在catch里
四丶.catch
1.用于指定发生错误时的回调函数
五丶.all
1.Promise.all
方法接受一个数组做为参数,p1
、p2
、p3
都是 Promise 实例,当p一、p二、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()相同,不一样的是,参数中的p一、p二、p3只要有一个改变状态,promise就会马上变成相同的状态并执行对于的回调
七丶resolve
有时须要将现有对象转为Promise对象,Promise.resolve
方法就起到这个做用
八丶reject
Promise.reject(reason)
方法也会返回一个新的 Promise 实例,该实例的状态为rejected
。
九丶done
Promise对象的回调链,无论以then
方法或catch
方法结尾,要是最后一个方法抛出错误,都有可能没法捕捉到(由于Promise内部的错误不会冒泡到全局)。所以,咱们能够提供一个done
方法,老是处于回调链的尾端,保证抛出任何可能出现的错误。
十丶finally
finally
方法用于指定无论Promise对象最后状态如何,都会执行的操做。它与done
方法的最大区别,它接受一个普通的回调函数做为参数,该函数无论怎样都必须执行。