Promise对象
Promise实例
const promise = new Promise(function(resolve, reject) {
//...
if(异步操作成功) {
resolve(value);
}
else {
reject(error);
}
});
Promise构造函数接受一个函数作为参数,该函数的两个参数分别为resolve和reject
resolve函数将Promise对象的状态从“未完成”变为“成功”
reject函数将状态从“未完成”变为“失败”
可以用then方法分别指定resolved状态和rejected状态的回调函数
reject函数可选
promise.then(function(value) {
// success
}, function(error) {
// failure
});
resolve和reject总是会在所有操作结束后执行
catch()
用于指定发生错误时的回调函数
p.then((val) => console.log(val))
.catch((errr) => console.log(err));
一般来说,不要在then里面定义Reject状态的回调函数,应该使用catch方法
promise
.then(function(data) { //cb
// success
})
.catch(function(err) {
// error
});
finally()
不管最后转该如何,都会执行的操作
promise
.then(result => {···})
.catch(error => {···})
.finally(() => {···});
Promise.all()
将多个Prmise实例,包装成一个新的Promise实例
const p = Promise.all([p1, p2, p3]); //参数可以不是数组,但必须具有Iterator接口,且返回的每个成员都是Promise实例
p的状态由p1,p2,p3决定
1.只有p1,p2,p3状态都变成fulfilled,p的状态才会变成fulfilled,此时p1,p2,p3的返回值组成一个数组,传递给p的回调函数
2.只要p1,p2,p3有一个被rejected,p的状态就变成rejected,此时第一个被reject的实例的返回值会传递给p的回调函数
# 如果作为参数的Promise实例自己定义了catch方法,那么一旦被rejected,并不会触发Promise.all()的catch方法
Promise.race()
将多个Prmise实例,包装成一个新的Promise实例
只要有一个改变状态,p的状态就改变,率先改变的返回值传递给p的回调函数
Promise.resolve()
将现有对象转为Promise对象如果对象具有then方法,Promise.resolve方法会将对象转为Promise对象,并执行then方法
如果参数是一个原始值,则会返回一个新对象,状态为resolved
const p = Promise.resolve('Hello');
p.then(function (s){
console.log(s)
});
// Hello
如果不带参数,则返回一个resolved状态的Promise对象
Promise.reject()