15

私が取り組んでいる Javascript プロジェクトの一部として、いくつかの同期 ajax 呼び出しがあります(それは "sjax" になると思いますが、余談になります)。私は現在、デバッグ パネルを作成しています。このパネルを使用すると、人工的にシミュレートされたネットワーク条件をラップしてサイトをテストできます$.ajax。簡単なこと: 500 レスポンスなどを偽造し、ajax 呼び出しにかかる時間を大幅に長くします。

非同期呼び出しの場合は簡単です。実際の応答が戻ってきたら、 a を追加しsetTimeoutて、コールバックをトリガーする前に人為的な応答時間を待機させます。ただし、同期ではないため、これは明らかに同期呼び出しでは機能しませんsetTimeout

では、Javascript プログラムにブロッキングを一定時間待機させる方法はありますか?

私が考えることができる唯一のことは、次のようなものです:

function wait(ms) {
    var start = +(new Date());
    while (new Date() - start < ms);
}

より良い解決策はありますか?

(また、ajax 呼び出しをブロックする正当な理由があると仮定してください... :-\)

4

3 に答える 3

5

JavaScript レベルでは実行しないでください。Fiddlerなどのプロキシを取得し、 AutoResponderをセットアップして、呼び出しを一定時間遅らせます。

于 2011-11-09T15:09:30.187 に答える
2

人為的な遅延をデバッグ目的でのみ行う場合:

alert('block me one more time');

ECMAscript でブロック コードを使用するための合理的な方法は他にありません。Javascript は、ブラウザーが DOM のレンダリングやその他の処理に使用する同じスレッド (「UI スレッド」) で実行されるため、ショー全体は何もブロックしないように設計されています。

もちろん、ループを使用してそれを偽造することもできますが、それはショーの倒錯です。

于 2011-11-09T15:22:29.807 に答える