1.Promise 实例
定义一个Promise
实例,接收一个函数,函数中的两个参数分别是resolve和reject。resolve是异步操作成功之后调用,reject是失败之后调用。
const promise = new Promise(function(resolve, reject) {
});
注意:Promise 创建后就会立即执行,状态变为失败或者成功之后就不会再改变了。
2.Promise.prototype.then()
Promise实例生成以后,会有一个then方法。(这个then方法是定义在原型对象Promise.prototype上的)。then方法的第一个参数是resolved状态的回调函数,第二个参数(可选)是rejected状态的回调函数。
promise.then(function(value) {
// success
}, function(error) {
// failure
});
then方法可以链式调用:前一个回调函数,有可能返回的还是一个Promise对象(即有异步操作),这时后一个回调函数,就会等待该Promise对象的状态发生变化,才会被调用。
const p = function(greeting) {
return new Promise((resolve) => {
setTimeout(() => {
resolve(greeting)
}, 1000)
})
}
p("hello").then(value => {
console.log(value); //1s之后弹出hello
return p("world");
}).then(value => {
console.log(value); //再过1s弹出world
})
注意,如果某一个then执行后状态变为rejected,就不会继续执行then方法,而是执行rejected回调函数。
3.Promise.prototype.catch()
如果不想使用then的第二个参数去处理错误,可以使用catch。
p.then(value => {
// success
}).catch(error => {
// failure
});
4.Promise.prototype.finally()
finally方法用于指定不管 Promise 对象最后状态如何,都会执行的操作。(ES2018 引入标准的)
promise
.then(result => {···})
.catch(error => {···})
.finally(() => {···});
5.Promise.all()
Promise.all方法把多个实例包装成一个新的 Promise 实例,当几个实例都是成功状态,则新实例p就是成功状态。如果某一个是失败状态,则新实例就是失败状态。
const p = Promise.all([p1, p2, p3]);
注意:如果某个参数不是promise实例,则会把它自动转换为promise实例。
6.Promise.race()
Promise.race()也是把多个实例包装成一个新的实例,当其中某一个实例率先改变状态,p的状态就跟着改变。那个率先改变的 Promise 实例的返回值,就传递给p的回调函数。
const p = Promise.race([p1, p2, p3]);
注意:如果某个参数不是promise实例,也会把它自动转换为promise实例。
7.Promise.resolve()
将现有的对象转换为Promise 对象,并且状态为resolved。
Promise.resolve('foo')
// 等价于
new Promise(resolve => resolve('foo'))
注意: 参数是一个promise实例,会直接返回这个实例。
8.Promise.reject()
返回一个rejected状态的Promise 对象。
网友评论