promise的几个方法

 1、promise.prototytype.then():promise实例状态改变的回调函数,有两个参数:第一个是成功回调函数,第二个是失败回调函数。他会返回一个全新的promise,因此可以继续then链式调用。

 2、promise.prototype.catch():失败回调函数,状态变为rejected执行。相当于promise. prototytype.then(null/undifined,rejection)

  如果promise内发生了错误,但却没有定义catch(),这时运行到这一行代码会报错,但是不会影响到promise后面代码的执行

const someAsyncThing = function() {
  return new Promise(function(resolve, reject) {
    // 下面一行会报错,因为x没有声明
    resolve(x + 2);
  });
};

someAsyncThing().then(function() {
  console.log('everything is great');
});

setTimeout(() => { console.log(123) }, 2000);        //依然会输出

// Uncaught (in promise) ReferenceError: x is not defined
// 123

3、promise.prototype.finally():promise实例无论状态是什么都会执行的函数。

promise
.then(result => {···})
.catch(error => {···})
.finally(() => {···});

//在执行完then和catch后,仍然执行finally()

  finally函数不接受任何参数

4、promise.all():将多个promise实例包装成一个新的promise实例

const p = Promise.all([p1, p2, p3]);

  a. 只有所有实例的状态都变成fulfilled,它才会变成fulfilled;

  b. 只要其中一个实例的状态变为rejected,它就会变成rejected。

5、promise.race():将多个promise实例包装成一个新的promise实例

 他的状态取决于状态最先改变的实例

6、promise.any():将多个promise实例包装成一个新的promise实例

  a. 只要有一个实例变成fulfilled,他就会变成fulfilled

  b. 只有全部实例状态都变成rejected,它才会变成rejected

7、promise.allSettled():等所有实例都返回结果,他的状态就只会变成fulfilled

const resolved = Promise.resolve(42);
const rejected = Promise.reject(-1);

const allSettledPromise = Promise.allSettled([resolved, rejected]);

allSettledPromise.then(function (results) {
  console.log(results);
});
// [
//    { status: 'fulfilled', value: 42 },
//    { status: 'rejected', reason: -1 }
// ]

  then方法中接收到的参数是一个数组,内部的元素是对象,对象里包含了一个个实例的status状态,以及成功结果value和失败原因reason。

你可能感兴趣的:(ES6)