一丶什么是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方法接受一个数组作为参数,p1p2p3都是 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方法的最大区别,它接受一个普通的回调函数作为参数,该函数不管怎样都必须执行。

 
posted on 2017-08-21 12:59  SunShineKG  阅读(239)  评论(0编辑  收藏  举报