我想强制进行同步重绘,这可行吗?
不幸的是,我正在使用的库通过XMLHttpRequest.prototype.open(_, _, false)
发送长时间运行的同步请求。我试图通过猴子补丁XMLHttpRequest.prototype.send
在请求发送之前更新页面并显示加载指示器,但是opacity: 0.7
样式从未被看到:
const oldSend = XMLHttpRequest.prototype.send;
XMLHttpRequest.prototype.send = function(...args) {
document.body.style.opacity = "0.7";
// is there something I can do to force a repaint on this line?
const retVal = oldSend.bind(this)(...args);
document.body.style.opacity = "1";
return retVal;
}
我的大部分研究都建议重构为异步操作:
但是,我无法控制进行同步请求的代码。
编辑:另一个相关帖子:
oldSend.bind(this)(...args)
可以改为oldSend.apply(this, args)
。 - 4castlesetTimeout
上调用原始的慢同步函数呢?期待看到更好的做法 :-)。 - Joshua R.send
来说是可行的,因为它无论如何都返回undefined
,但是响应将立即对调用者可用。 - Bergi