【发布时间】:2016-02-18 20:38:48
【问题描述】:
在我的应用程序中,我有一个submitSuccesscallback 函数,它会在提交成功时从我自己的JS 库中触发。
在submitSuccesscallback中,我首先展示了一个加载器并做一些初始化操作。
function submitSuccesscallback(){
showLoadingIndicator(); // has code a display loader
doSubmitSuccessOperations();// has code to do some app specific operations
}
这里doSubmitSuccessOperations() 需要大约 5 秒才能完成执行。
现在我的问题是上面的代码在我得到submitSuccesscallback() 后的 5 秒内不显示加载程序(即 UI 从 showLoadingIndicator() 更改)。
如果我像下面这样更改 submitSuccesscallback(),我可以在触发 submitSuccesscallback() 后立即看到加载程序。
function submitSuccesscallback(){
showLoadingIndicator(); // has code a display loader
setTimeout(doSubmitSuccessOperations, 1000);
}
现在我想知道的是:
setTimeout 是否让我的
doSubmitSuccessOperations()在后台运行?我明显感觉到
doSubmitSuccessOperations()在阻塞UI操作,JS中有没有UI线程和后台线程的概念?上述
setTimeout的任何其他替代方案?
【问题讨论】:
-
setTimeout 为您的代码提供了足够的时间来更新 DOM。是什么导致了其他功能的锁定?我猜是一个巨大的循环。
-
^ 或
async: falseAJAX 请求。 -
@epascarello 即使指定了 setTimeout(doSubmitSuccessOperations, 10);它工作正常。
-
@vrs 那是因为您实际上正在做的是在另一个线程中运行
doSubmitSuccessOperations函数。setTimeout(fn, 0);也可以。 -
在现代浏览器中 5 秒的处理时间是 巨大的 时间。这段代码到底在做什么?
标签: javascript jquery asynchronous javascript-objects dom-events