Promise.allSettled是做什么的
用于并行处理多个 promise 的,但是无论每个 promise 是成功还是失败,它都会返回一个新的 promise。当所有 promise 都完成时,Promise.allSettled 会返回一个新的 promise,该 promise 会解析为每个原始 promise 的结果集,无论这些结果是成功还是失败。每个结果都将是一个对象,该对象包含一个状态代码(status)和一个结果(value 或 reason)。如果某个 promise 成功,则其状态代码为 "fulfilled",结果为该 promise 的值。如果某个 promise 失败,则其状态代码为 "rejected",结果为该 promise 的拒绝原因
手写Promise.all
const promiseAll = (promises) => {
return new Promise((resolve, reject) => {
if (!Array.isArray(promises)) {
throw new TypeError(`promises must be an array`);
}
let resolveCounter = 0;
let promiseNum = promises.length;
const resolveResult = [];
for (let i = 0; i < promiseNum; i++) {
Promise.resolve(promises[i]).then(
(value) => {
resolveCounter++;
resolveResult[i] = value;
if (resolveCounter == promiseNum) {
return resolve(resolveResult);
}
},
(error) => {
return reject(error);
}
);
}
});
};
什么是HTTP队头堵塞,如何解决
- 问题: HTTP传输到报文必须是一发一收,但是,里面的任务被放到一个任务队列中串行执行,一旦队首到请求处理太慢,就会阻塞后面的请求的处理。
- 解决方案:
并发连接:对于一个域名允许分配多个长任务,那么相当于增加了任务队列,不至于一个队伍的任务阻塞其他所有任务。域名分片:将域名分出很多二级域名,它们都指向同样的一台服务器,能够并发的长连接数变多,解决队头阻塞的问题。
React中Portals是做什么的?
Portalt 提供看一种将子节点渲染到存在于父组件以外的DOM节点上。
ReactDOM.createPortal(child,container)