如果传递进来的是一个Promise实例
,则完整的返回这个Promise实例
,举个栗子:
const p1 = new Promise((resolve) => { resolve('Promise 实例: p1') }) const ppromise = Promise.resolve(p1) console.log(ppromise, 'Promise.resolve的实例:ppromise') 复制代码
执行结果如下:
网络异常,图片无法展示
|
如果没有传参数,返回PromiseResult
为undefined
的Promise实例:
const pundefined = Promise.resolve() console.log(pundefined) 复制代码
执行结果如下:
网络异常,图片无法展示
|
Promise.reject
Promise.reject方法相同,也会返回一个Promise实例
,不同的是PromiseStatus
为rejectd
,用上面的栗子进行测试:
const pstring = Promise.reject('HoMeTowm') console.log(pstring,'字符串 Promise实例') const pnumber = Promise.reject(123) console.log(pnumber,'数字 Promise实例') const pboolean = Promise.reject(true) console.log(pboolean,'布尔值 Promise实例') const pobject = Promise.reject({name: 'HoMeTowm'}) console.log(pobject,'对象 Promise实例') console.log('......') 复制代码
执行结果如下:
网络异常,图片无法展示
|
Promise.all
Promise.all方法,可以发起并发请求,然后再所有Promise都脱离pending
状态后,统一返回结果,接受一个数组作为参数,数组中的项为Promise实例
(如果不是的话,传啥返回啥),返回一个Promise实例,PromiseResult
为每个实例对应的结果
,PromiseState
所有的实例未脱离pending
之前为pending
,举个例子:
const p1 = new Promise((resolve, reject) => { setTimeout(() => { console.log("p1 resolve执行"); resolve("p1 的结果"); }, 1000); }); const p2 = new Promise((resolve, reject) => { setTimeout(() => { console.log("p2 resolve执行"); resolve("p2 的结果"); }, 2000); }); const pnumber = 510 const pall = Promise.all([p1, p2, pnumber]); console.log("promise.all 的结果未完成:", pall); pall.then((res) => { console.log(res, "全部的结果"); console.log("promise.all 的结果已完成:", pall); }); 复制代码
执行结果如下:
网络异常,图片无法展示
|
数组中如果有一个失败,则返回失败的结果,只要失败了就返回!举个栗子:
const p1 = new Promise((resolve, reject) => { setTimeout(() => { console.log('p1 还能执行') throw "哎呀,p1报错了"; }, 1000); }); const p2 = new Promise((resolve, reject) => { setTimeout(() => { console.log('p2 还能执行') resolve("p2 的结果"); }, 2000); }); const preject = Promise.reject("Promsie.reject 失败"); const pall = Promise.all([p2, p1, preject]); console.log("promise.all 的结果未完成:", pall); pall .then((res) => { console.log(res, "全部的结果"); console.log("promise.all 的结果已完成:", pall); }) .catch((err) => { console.log(err, "失败了 嘤嘤嘤"); }); 复制代码
执行结果如下:
网络异常,图片无法展示
|
Promise.allSettled
Promise.allSettled用法与Promise.all相同,不同的是,Promise.allSettled不会因为有一个失败,就走到catch,而是会走到then,并告诉你,哪个失败了,那个成功了,举个栗子:
const p1 = new Promise((resolve, reject) => { setTimeout(() => { reject('p1 失败') }, 1000); }); const p2 = new Promise((resolve, reject) => { setTimeout(() => { resolve("p2 成功"); }, 2000); }); const pall = Promise.allSettled([p2, p1, Promise.reject(1)]); console.log("promise.allSettled 的结果未完成:", pall); pall .then((res) => { console.log(res, "全部的结果"); console.log("promise.allSettled 的结果已完成:", pall); }) .catch((err) => { console.log(err, "失败了 嘤嘤嘤"); }); 复制代码
执行结果如下:
网络异常,图片无法展示
|
Promise.race
Promise.race与其字面意思相同,竞速
,即哪个先完成,就以哪个为结果,参数与Promise.all相同,举个栗子:
const p1 = new Promise((resolve, reject) => { setTimeout(() => { reject('p1 失败') }, 1000); }); const p2 = new Promise((resolve, reject) => { setTimeout(() => { resolve("p2 成功"); }, 2000); }); const prace = Promise.race([p2, p1]); prace.then(res => { console.log(res,'成功') }).catch(err => { console.log(err, '失败') }) 复制代码
执行结果如下:
网络异常,图片无法展示
|
Promise.any
Promise.any方法同样是将多个 Promise
实例,包装成一个新的 Promise
实例,有一个子实例成功就算成功,全部子实例失败才算失败,返回AggregateError: All promises were rejected
,举个栗子:
const p1 = new Promise((resolve, reject) => { setTimeout(() => { reject('p1 失败') }, 1000); }); const p2 = new Promise((resolve, reject) => { setTimeout(() => { resolve("p2 成功"); }, 2000); }); const prace = Promise.any([p2, p1]); prace.then(res => { console.log(res,'成功') }).catch(err => { console.log(err, '失败') }) 复制代码
执行结果如下:
网络异常,图片无法展示
|
将p2
改为reject
之后,执行结果如下:
网络异常,图片无法展示
|