使用兩個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');
}複製程式碼