0

或者有没有办法产生相同的效果,即 JavaScript 程序停止直到下载完成(不使用setTimeout)?

4

1 回答 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 回答