或者有没有办法产生相同的效果,即JavaScript程序在下载完成之前停止(不使用setTimeout
)?
答案 0 :(得分: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();
}
你回调的工作原理(args传递给它,它是如何提供给下载代码的)将根据你正在使用的js库而有所不同,但这是如何异步处理它的基本思路。 / p>