es2023_03_28_分享

1.小技巧,给对应的git地址前加1s,便可以进入项目编译模式,方便跳转与引用

如:https://github.com/alibaba/hooks转https://github1s.com/alibaba/hooks

2.在一些数组方法中,你在操作过程中,会导致原数组发生变化,这样就会导致你想再次拿到上次的数组就会失效,所以以下是可以获取原数组的

array.toSorted();
array.toReversed();
array.toSpliced(0, 1)

3.数组的正向搜索与反向搜索

//一个是值一个是索引
arraylast.findLast((n) => n === 3);
arraylast.findLastIndex((n) => n === 3);
arraylast.find((n) => n === 3);
arraylast.findIndex((n) => n === 3);

4.多个请求的处理方式

//第一个成功的resolve进入then,只有都reject那么才进入catch或者error
    Promise.any([
      Promise.reject("reject 1"),
      Promise.reject("reject 2"),
      Promise.reject("reject 3"),
      // Promise.resolve("resolve1"),
      // Promise.resolve("resolve2"),
    ]).then(
      (first) => {
        // 只要有一个 resolve,就会执行到这里,并且只会返回 resolve1,
        console.log(first);
      },
      (error) => {
        // 所有都 reject 时,才会进入error
        console.log(error);
      }
    );

    //allSettled 等所有返回才结束,返回所有的对应的status和返回值
    Promise.allSettled([
      Promise.resolve("1resolve"),
      Promise.resolve("2resolve"),
      Promise.reject("e1 reject"),
      Promise.resolve("3resolve"),
      Promise.resolve("4 resolve"),
    ]).then((res) => {
      console.log("then", res); 
    });

    // 有一个失败了那么就进入catch,都成功才进入then,
    Promise.all([
      Promise.resolve("1 reject"),
      Promise.resolve("2 reject"),
      // Promise.reject("e1 reject"),
      Promise.resolve("3 reject"),
    ])
      .then((res) => {
      //只返回成功的reslove,及其对应返回值
        console.log("then", res);
      })
      .catch((err) => {
        // 打印 catch e1
        console.log("catch", err);
      });


///test//

    //两个 API 中获取数据,并返回响应时间较短的数据 =>只返回快的
    const fetchFromAPI1 = new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve("fetchFromAPI1");
      }, 1000);
    });

    const fetchFromAPI2 = new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve("fetchFromAPI2");
      }, 500);
    });
	//通过 console.time记录时间
    console.time("race1111");
    Promise.race([fetchFromAPI1, fetchFromAPI2]).then((result) => {
      console.timeEnd("race1111");
      console.log(result, "result"); 
    });
race1111: 510.271728515625 ms 
//fetchFromAPI1 result

    console.time("all1111");
    Promise.all([fetchFromAPI1, fetchFromAPI2]).then((result) => {
      console.timeEnd("all1111");
      console.log(result, "result");
    });
//all1111: 1008.76025390625 ms
//['fetchFromAPI1', 'fetchFromAPI2'] 'result'


    console.time("allSettled1111");
    Promise.allSettled([fetchFromAPI1, fetchFromAPI2]).then((result) => {
      console.timeEnd("allSettled1111");
      console.log(result, "result"); 
    });
//allSettled: 1009.333251953125 ms 
//['fetchFromAPI1', 'fetchFromAPI2'] result

    console.time("any1111");
    Promise.any([fetchFromAPI1, fetchFromAPI2]).then((result) => {
      console.timeEnd("any1111");
      console.log(result, "result"); // "Data from API 2"
    });
//any1111: 505.498779296875 ms
//fetchFromAPI1 result

总结:

抢占式,race和any,里面的请求,谁快用谁。不管其他请求的数据。all和allsettle是等待所有数据请求结束了再一起返回,区别就是all直接是请求数据数组,allsettle包含status的状态和请求数据数组的对象

promise的any和all的想法类似于array的some和every,

any只有有一个resolve就then,所有都reject才走error的回调,和some一样,只要在遍历过程中有一个满足条件就返回true都不满足才是false

all只要有一个reject,那么就进error的回调,所有都resolve才进入then,和every一样,有一个不满足就是false,都满足才是true

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值