中心建设投官方网站 软件下载如何做谷歌seo推广
promise的静态方法相对简单,这篇文章做个总结,以便漏补缺
总结如下:
1. Promise.all/Promise.anyPromise.allSettled/Promise.race都是接受数组,数组里面是promise
2.. Promise.all 接收的promise数组只要有一个失败那么整个就是失败进入cantch错误状态,可以打印错误信息
3.Promise.any可以看成all的反义方法,它会打印最先成功的promise,如果全部失败,则会进入catch可以打印失败原因
4.Promise.race : race顾名思义,打印最先完成的promise,不论成功还是失败
5.Promise.allSettled 不论成功和失败,他都会打印,相对来说这个方法,在实际开发中反而挺有用的(因为我们可以做筛选之类的)
方法名 | 含义 |
Promise.resolve(data) | 直接返回一个完成状态的任务 |
Promise.reject(reason) | 直接返回一个拒绝状态的任务 |
Promise.all(任务数组) | 返回一个任务 任务数组全部成功则成功 任何一个失败则失败 |
Promise.any(任务数组) | 返回一个任务 任务数组任一成功则成功 任务全部失败则失败 |
Promise.allSettled(任务数组) | 返回一个任务 任务数组全部已决则成功 该任务不会失败 |
Promise.race(任务数组) | 返回一个任务 任务数组任一已决则已决,状态和其一致 |
/*** 根据页码获取学生数据,返回Promise* @param {Number} page 页码*/
function fetchStudents(page) {return new Promise((resolve, reject) => {setTimeout(() => {if (Math.random() < 0.3) {reject(new Error(`网络错误!获取第${page}页数据失败!`));return;}// 模拟学生数据const stus = new Array(10).fill(null).map((d, i) => ({id: `NO.${(page - 1) * 10 + i + 1}`,name: `姓名${(page - 1) * 10 + i + 1}`,}));resolve(stus);}, Math.floor(Math.random() * 5000));});
}// 利用 fetchStudents 函数,完成下面的练习// 获取1-10页的学生,最终按照页码的顺序合并成一个数组,任何一页的数据获取出现错误,则任务不再继续,打印错误消息const proms = new Array(10).fill(1).map((it, i) => fetchStudents(i + 1));// Promise.all(proms)
// .then((result) => {
// console.log(result.flat());
// })
// .catch((err) => {
// console.log(err);
// });// 获取1-10页的学生,最终按照页码的顺序合并成一个数组,如果某些页码的数据获取失败,就不加入该数据即可
// Promise.allSettled(proms).then((result) => {
// result = result
// .filter((r) => r.status === 'fulfilled')
// .map((it) => it.value)
// .flat();
// console.log(result);
// });// 获取1-10页的学生,打印最先获取到的数据,如果全部都获取失败,则打印所有的错误消息
// Promise.any(proms)
// .then((result) => {
// console.log(result);
// })
// .catch((err) => {
// console.log(err.errors);
// });// 获取1-10页的学生,输出最先得到的结果(有结果输出结果,有错误输出错误)
Promise.race(proms).then((result) => {console.log(result);},(err) => {console.log(err);}
);