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 に答える