1

CMSでサイトをクロールし、特定の種類のデータを検索するWebアプリケーションがあります。

これは、再帰的なファイル/ディレクトリループのように機能します。

//pseudo code
var rootWeb = context.site.rootWeb();
var objectThatHoldsAllResults;
recursiveSiteSearch(rootWeb);

function recursiveSiteSearch(webSite) {
   //Get all content of a certain type and add to objectThatHoldsAllResults
   //Get all SubSites and throw them into a loop that runs recursiveSiteSearch
}

このアプリケーションはクラウドに存在し、それにアクセスする各CMSにいくつのサブサイトが存在するかはわかりません。

ループが特定のタイプのすべてのコンテンツを取得するたびに、WebサイトへのAJAX呼び出しを行います。

再帰がいつ行われるかを知る必要がありますが、その方法がわかりません。

4

1 に答える 1

2

簡単に言うと、実行が次のステートメントにフォールスルーすると、再帰は終了しますrecursiveSiteSearch(rootWeb);

ただし、may / will(?)内の非同期性(ajax)recursiveSiteSearchは、その時点で潜在的なアクティビティがまだ存在することを意味します。

したがって、すべてのプロミス(つまり、再帰内で開始されたすべてのajaxリクエスト)がいつ完了したかを検出するためのメカニズムが必要であるように思われます。

jQueryは、そのようなメカニズムを提供します。

擬似コード:

function recursiveSiteSearch(webSite) {
    //Get all content of a certain type and add to objectThatHoldsAllResults
    //Get all SubSites and throw them into a loop that runs recursiveSiteSearch
    //Within the loop, push jqXHR objects onto the externally declared `promises` array.
}

var rootWeb = context.site.rootWeb();
var objectThatHoldsAllResults;
var promises = [];
recursiveSiteSearch(rootWeb);
jQuery.when.apply(jQuery, promises).done(function() {
    //statements here will execute when 
    //recursion has finished and all ajax 
    //requests have completed.
});

これが機能する理由は、jqXHRオブジェクト(jQuery.ajax()とその省略形によって返される)がjQueryのPromiseインターフェースを実装しているためです。

于 2013-01-04T20:33:25.940 に答える