const promise =new Promise ((resolve, reject)=>{
if (/* 异步操作成功 */){
resolve(res);
} else {
reject(error);
}
})
注:promise是构造函数,传入一个参数,参数是异步函数
异步函数两个参数resolve(绑定异步执行成功状态)、reject(绑定异步执行失败状态)
.then方法(指定resolve状态和reject状态的回调函数)
promise.then(res=>{
console.log(res)
},error=>{
console.log(error)
})
.catch方法(较好的做法.then里面定义resolve状态回调.catch里面定义reject状态)
promise.then(
res = >{
console.log(res)
}
).catch(
error = >{
console.log(error)
}
)
.finally方法用于指定不管 Promise 对象最后状态如何,都会执行的操作。(不传参数)
promise.then(res = >{
console.log(res)}
).catch(error=>{
console.log(error)
}.finally(
console.log("不管对错一定执行")
)
Promise.all([p1,p2,p3])参数是Promise实例数组—方法返回新的Promise实例
只有p1、p2、p3的状态都变成fulfilled,p的状态才会变成fulfilled
只要p1、p2、p3之中有一个被rejected,p的状态就变成rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数。
const promises = [2, 3, 5, 7, 11, 13].map(function (id) {
return getJSON('/post/' + id + ".json");
});
Promise.all(promises).then(function (posts) {
// ...
}).catch(function(reason){
// ...
});
Promise.race([p1, p2, p3])参数是Promise实例数组—方法返回新的Promise实例
只要p1、p2、p3之中有一个实例率先改变状态,新的promise实例的状态就跟着改变。那个率先改变的 Promise 实例的返回值,就传递给p的回调函数。
const p = Promise.race([
fetch('/resource-that-may-take-a-while'),
new Promise(function (resolve, reject) {
setTimeout(() => reject(new Error('request timeout')), 5000)
})
]);
p
.then(console.log)
.catch(console.error);