或者有没有办法产生相同的效果,即 JavaScript 程序停止直到下载完成(不使用setTimeout
)?
问问题
209 次
1 回答
0
Javascript 是异步的,因此您需要异步处理下载。这主要是因为 javascript 运行单线程并且通常与 UI 线程共享,因此如果您在下载时阻止了您的代码,那么在您的代码完成之前,用户将根本无法与页面交互。
但是,异步处理它应该不难,只要您用于下载文件的机制在完成时支持回调(大多数情况下应该这样做)。
假设您有以下代码:
function doDownload(url) {
doSomeInitialStuff();
startDownload(url); // assuming this would block, which it can't
doSomeOtherStuff();
doMoreOtherStuff();
}
如果您的下载机制在完成时支持回调(下载完成或失败后调用的函数),那么您可以像这样重构代码:
function doDownload(url) {
doSomeInitialStuff();
startDownload(url, onDownloadComplete);
}
function onDownloadComplete() {
doSomeOtherStuff();
doMoreOtherStuff();
}
回调如何工作的细节(传递给它的参数,它如何提供给下载代码)将根据您使用的 js 库而有所不同,但这是如何异步处理它的基本思想。
于 2013-03-25T15:00:13.897 回答