「这是我参与2022首次更文挑战的第18天,活动详情查看:2022首次更文挑战」。
一、promise.all()的方法
Promis是异步编程的解决方案,可以解决回调地狱的问题,避免了层层嵌套的问题
Promis 构造函数包含一个参数和一个带有 resolve(成功)和 reject(失败)两个参数的一个回调函数,在回调中可以执行一些操作,如果没有错误就调用 resolve ,反之调用 reject 。
已经实例化的 Promis 对象可以调用 then() 方法来传递 resolve 和 reject 方法作为回调
下面举个例子来说明 .then() 和 .catch()
let p = new Promise((resolve, reject) => {
//异步操作
setTimeout(function(){
var num = parseInt(Math.random()*100); //生成1-10
if(num<=50){
resolve(num)
}
else{
reject('大于50')
}
}, 1000);
})
p.then(res=>{
console.log(res) //resolve 中 num 的值
},error=>{
console.log(error) //报错: reject 中的信息
console.log(1) //不用 .catch() 的话不会执行
})
p.then(res=>{
console.log(res) //resolve 中 num 的值
}).catch(error=>{
console.log(error) //打印: reject 中的信息
console.log(1) //会执行
})
Promise.all() 用于将多个 Promise 实例,包装成一个新的 Promise 实例
Promise.all() 接受一个数组作为参数,数组里的元素都是 Promise 对象的实例
二、重绘回流
什么是重绘Repaint 和重排(回流 reflow)
重绘:当元素的一部分属性发生改变,如外观、背景、颜色等不会引起布局变化,只需要浏览器根据元素的新属性重新绘制,使元素呈现新的外观叫做重绘。
重排(回流):当render树中的一部分或者全部因为大小边距等问题发生改变而需要DOM树重新计算的过程
重绘不一定需要重排,重排必然导致重绘
如何最小化 重绘回流
- 需要对元素进行复杂操作时,可以先隐藏 display:none,操作完成后再显示
- 需要创建搓个DOM节点时,使用 DocumentFragment 创建完成后一次性加入
- 尽量避免table布局(table元素一旦发生重排就会使所有table发生重排)
- 避免使用css表达式(expression),因为每次调用都会重新计算
- 尽量使用css样式复合写法
加油加油!!
努力学习!!