接着前面的下面继续介绍promise的静态方法:
一、 resolve()方法:将现有的对象转换为promise对象。它有以下4种情况:
- 对象本身为promise实例对象,它会原封不动的将其返回,不做处理。
- 具有then方法的对象,它会将其转换为promise对象,然后立即执行then方法
let obj = {
a: "then",
then() {
console.log(this.a); //then
},
};
let promise = Promise.resolve(obj);
console.log(promise);
- 不具有then方法或者不是对象,它直接返回一个新的对象状态为resolve
let x = 5;
let promise = Promise.resolve(x);
promise.then((res) => {
console.log(res);
});
console.log(promise);
4.不带任何参数,直接返回一个promise对象并且状态为resolve.,如果希望得到一个新的promise对象拿那么就可以调用它。
let promise = Promise.resolve();
console.log(promise); //返回一个新的promise
// pending; //fulfilled //rejected
二 、promise.reject方法:它也会返回一个新的promise实例,它的状态为失败。
let promise = Promise.reject(new Error('出错'));
console.log(promise);
let x=new Promise((resolve,reject)=>{
reject(new Error('出错'))
})
// pending; //fulfilled //rejected
三、 promise.race方法也是将多个Promise实例包装成一个新的promise,它是如果有一个promise改变就将最先变的结果值传递给它。
四、promise.allSettled:它是等所有的异步的请求都完成。不管成功还是失败、才会得到结果。
function time1(){
return new Promise((resolve,reject)=>{
setTimeout(()=>{resolve(3)},10000)
})
}
function time2(){
return new Promise((resolve,reject)=>{
setTimeout(()=>{resolve(4)},4000)
})
}
function time3(){
return new Promise((resolve,reject)=>{
setTimeout(()=>{resolve(5)},6000)
})
}
let race=Promise.allSettled([time1,time2,time3])
console.log(race);
五、promise.any它和all方法相反,有一个完成就直接返回完成、全部失败就返回失败
六、 Promise.all:将多个Prmise实例包装成一个新的promise,
1.如果每个实例都是成功状态就返回成功状态的值为一个数组,如果有一个失败就返回失败状态的值。
let promise1 = Promise.reject(new Error('出错'));
let promise2=new Promise((resolve,reject)=>{
reject(new Error('出错'))
})
let promise3=new Promise((resolve,reject)=>{
resolve(3)
})
let promise=Promise.all([promise1,promise2,promise3])
console.log(promise); //出错
let promise1=new Promise((resolve,reject)=>{
resolve(2)
})
let promise2=new Promise((resolve,reject)=>{
resolve(2)
})
let promise3=new Promise((resolve,reject)=>{
resolve(3)
})
let promise=Promise.all([promise1,promise2,promise3])
promise.then(res=>{
console.log(res); //[2,2,3]
})
const p1 = new Promise((resolve, reject) => {
resolve("hello");
})
.then((result) => result)
.catch((e) => e);
const p2 = new Promise((resolve, reject) => {
throw new Error("报错了");
})
.then((result) => console.log(result))
.catch((e) => e);
Promise.all([p1, p2])
.then((result) => console.log(result))
.catch((e) => console.log(e));```