0

この記事では、次のコードがスタックを爆破すると述べています。

function fetchLatest() {
  $.getJSON('/wait?id=' + last_seen, function(d) {
    $.each(d, function() {
      last_seen = parseInt(this.id, 10) + 1;
      ul.prepend($('<li></li>').text(this.text));
    });
    fetchLatest();
  });
}

クライアント側のJavaScriptは、jQueryのgetJSONメソッドを使用して、単純なURLエンドポイントに対してロングポーリングを実行するだけです。これを再帰的に実行すると、最終的にブラウザーのJavaScriptスタックが破壊されるため、おそらく悪い考えですが、デモでは問題なく機能します。

これも本当ですか?もしそうなら、どうすればこれを防ぐことができますか?

4

1 に答える 1

6

それは真実ではありません。

getJSONは非同期であるため、次のfetchLatest()呼び出しは前の呼び出しが終了してからしばらくしてから開始されます。

このような同期コードを作成すると、フリーズしてスタックオーバーフローが発生します。

于 2012-11-29T01:27:20.277 に答える