Javascript中是否存在Java invokeLater()
SwingUtilities
方法的等效方法?
更新1
那么,setTimeout()
零延迟与invokeLater()
完全相同吗?
答案 0 :(得分:4)
如果您想以异步方式运行某些内容(以后),请尝试setTimeout()
JavaScript是单线程的。如果您想在事件处理程序之外运行一些耗时(CPU密集型)任务,可以使用上面的技术执行此操作,但是它仍然会使用事件处理线程(导致UI冻结)。
在浏览器中运行CPU密集型任务通常是个坏主意(web workers可能会改变这一点),因为它们与事件处理程序共享相同的线程,使它们等待。
答案 1 :(得分:0)
尝试了 setTimeout
,它使 UI 给人的印象是它正在工作,但不知何故花了很长时间。像这样:
for (...) {
setTimeout(function() {
// show a loading icon
// AJAX call
// heavy DOM manipulation
});
}
尝试了 Promise
。结果只是更好更快。所以现在的代码是这样的:
for (...) {
var promise = new Promise(function() {
// show a loading icon
// AJAX call
// heavy DOM manipulation
});
}