1、():promise实例状态改变的回调函数,有两个参数:第一个是成功回调函数,第二个是失败回调函数。他会返回一个全新的promise,因此可以继续then链式调用。
2、():失败回调函数,状态变为rejected执行。相当于promise. (null/undifined,rejection)
如果promise内发生了错误,但却没有定义catch(),这时运行到这一行代码会报错,但是不会影响到promise后面代码的执行
const someAsyncThing = function() {
return new Promise(function(resolve, reject) {
// 下面一行会报错,因为x没有声明
resolve(x + 2);
});
};
someAsyncThing().then(function() {
('everything is great');
});
setTimeout(() => { (123) }, 2000); //依然会输出
// Uncaught (in promise) ReferenceError: x is not defined
// 123
3、():promise实例无论状态是什么都会执行的函数。
promise
.then(result => {···})
.catch(error => {···})
.finally(() => {···});
//在执行完then和catch后,仍然执行finally()
finally函数不接受任何参数
4、():将多个promise实例包装成一个新的promise实例
const p = ([p1, p2, p3]);
a. 只有所有实例的状态都变成fulfilled,它才会变成fulfilled;
b. 只要其中一个实例的状态变为rejected,它就会变成rejected。
5、():将多个promise实例包装成一个新的promise实例
他的状态取决于状态最先改变的实例
6、():将多个promise实例包装成一个新的promise实例
a. 只要有一个实例变成fulfilled,他就会变成fulfilled
b. 只有全部实例状态都变成rejected,它才会变成rejected
7、():等所有实例都返回结果,他的状态就只会变成fulfilled
const resolved = (42);
const rejected = (-1);
const allSettledPromise = ([resolved, rejected]);
(function (results) {
(results);
});
// [
// { status: 'fulfilled', value: 42 },
// { status: 'rejected', reason: -1 }
// ]
then方法中接收到的参数是一个数组,内部的元素是对象,对象里包含了一个个实例的status状态,以及成功结果value和失败原因reason。