4

ループ内で jQuery 遅延関数を呼び出したいのですが、各反復は、遅延関数を使用して前の反復が完了するまで待機する必要があります。when()

  function (num_of_iterations) {

    var arr = [];

    for (var i = 1; i < num_of_iterations; ++i) {
      arr.push($.getJSON( ... 1 ... ));
      arr.push($.getJSON( ... 2 ... ));
      ...

      $.when.apply($, arr).then(function() {
        // somehow do the next iter. only now that all the asynch getJSON's are done
      });
    }
    return;
  }

もちろん、getJSONは非同期であるため、すべての反復のすべてのリクエストは、いずれかwhenが呼び出される前に実際に送信されます。

ここにあるものをthen.

しかし、再帰の代わりに使用するのに欠けているテクニックがあるかどうか疑問に思っています。将来のある時点で再帰がスタックを使い果たすことを常に心配しています。このパラメーターnum_of_iterationsは潜在的に非常に大きくなる可能性があります。

これに使えますpipe()か?フィルタリングに関するすべての話で、ドキュメントを理解するのに苦労しています...

4

2 に答える 2

1

この場合、パイプチェーンを使用できると思います。この動作中のjsfiddleをチェックして、これが多かれ少なかれあなたが探しているものであるかどうか私に知らせてください。 http://jsfiddle.net/tchaffee/Df3ay/3/

于 2012-09-23T21:56:37.523 に答える
0

関数チェーンと再帰は、非同期 JavaScript では非常に自然なことです。for ステートメントに見られるように、ループは 10 回実行されます。つまり、10 の再帰スタックもあるということなので、スタック サイズについて心配する必要はまったくありません (戻り条件を台無しにして、それが永遠に実行されない限り)。

于 2012-01-19T19:17:35.597 に答える