使用两个promise去等待主线程任务完成,第一个promise收集所有的数据改动,第二个promise控制render函数在密集的数据更改下只触发一次。
var obj = {};
var temp_a, temp_b;
var render_dom_count = 0;
Object.defineProperty(obj, 'a', {
configurable: true,
enumerable: true,
get() {
return temp_a;
},
set(v) {
temp_a = v;
render();
}
});
Object.defineProperty(obj, 'b', {
configurable: true,
enumerable: true,
get() {
return temp_b;
},
set(v) {
temp_b = v;
render();
}
});
function render(data) {
Promise.resolve().then(() => {
!render_dom_count && (render_dom_count = 1) && console.log('render');
Promise.resolve().then(() => {
render_dom_count = 0;
});
});
}
function changeAB() {
obj.a = 1;
console.log('change a');
obj.b = 2;
console.log('change b');
}