Promise几种方法的使用

73 阅读1分钟

当面试官问你如何合并100ms内的相同请求,并给每个请求都返回一个promise的时候,他到底在考什么??

Promsie一共有6个原生的方法,如何利用好这些方法解决实际问题呢?需要对每个方法的使用场景有概念。

Promise.all:

方法入参出参结束条件
Promise.allpromise数组一个promise结果数组任意一个被reject或者所有的被resolve
Promise.allSettledpromise数组一个promise结果数组所有的promise都有结果之后
Promise.anypromise数组一个promise或者一个[AggregateError]对象任意一个resolve或者所有的被reject
Promise.racepromise数组第一个被resolve的promise结果有一个promise被resolve
Promise.rejectanypromise对象-
Promise.resolveanypromise数组-

Promise.any

const promise1 = Promise.reject(0);
const promise2 = new Promise((resolve,reject) => setTimeout(()=>{reject(1)},100));
const promise3 = new Promise((resolve,reject) => setTimeout(()=>{reject(2)},300));
const promises = [promise1, promise2, promise3];

Promise.any(promises).then((value) => console.log(value)).catch((e)=>console.log(e.errors));

image.png

const promise1 = Promise.reject(0);
const promise2 = new Promise((resolve,reject) => setTimeout(()=>{resolve(1)},100));
const promise3 = new Promise((resolve,reject) => setTimeout(()=>{reject(2)},300));
const promises = [promise1, promise2, promise3];

Promise.any(promises).then((value) => console.log(value)).catch((e)=>console.log(e.errors));

image.png

比较常用的场景:

情景1: 一个页面上需要展示多个头像,每个头像都要通过一个requestAvatar的请求获取,如何合并在100ms内的相同请求,并给每个调用的地方都返回一个promise?

已知条件:

  1. 一个批量请求接口
  2. 每100ms只能批量请求一次

请给出一个函数,每次入参为一个uid,返回一个promise,如果请求结果里有uid则表示查到,否则返回一个拒绝的promise

如何将利用promise实现一个批量请求,获取资源后逐个分发