需要有关JavaScript递归和异步方法的建议

时间:2014-03-07 18:52:50

标签: javascript asynchronous recursion

我有一个包含在异步方法中的递归方法:

var loadWebsRecursively = function (url) {

    loadWebsDeferred(url).then(function (webs) {

        var wE = webs.getEnumerator();
        webCount += webs.get_count();
        while (wE.moveNext()) {
            var site = wE.get_current();
            var title = site.get_title().toLowerCase();
            var fqdn = siteRootUrl + site.get_serverRelativeUrl() + '/';
            .... // additional work
        }

         webProcessed++;
         loadWebsRecursively(fqdn);
    }
};

我需要一些关于如何确定所有递归调用都已完成的建议。每个Web可以有“N”个子网。

提前致谢!

1 个答案:

答案 0 :(得分:0)

您似乎正在寻求解决承诺序列。如果您正在使用javascript的本机ES6承诺实现,那么您可能正在寻找以下内容:

// Loop through our chapter urls
story.chapterUrls.reduce(function(sequence, chapterUrl) {
  // Add these actions to the end of the sequence
  return sequence.then(function() {
    return getJSON(chapterUrl);
  }).then(function(chapter) {
    addHtmlToPage(chapter.html);
  });
}, Promise.resolve());

有关详细信息,请参见此处:
http://www.html5rocks.com/en/tutorials/es6/promises/#toc-parallelism-sequencing