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