javascript - 通过 URLS 的 promise

标签 javascript web-scraping promise

我正在尝试找出一种方法来处理动态数量的 URL。我们的想法是运行一段时间,直到我们达到我们正在搜索的任何内容的限制 - 例如,让我们说 URLS。

    return new Promise(function(resolve, reject) {
        var links = [];
        var uri = feed.uri;
        var promise;
        var loadMore = true;
        var waiting = false;
        var page;
        while(loadMore) {
            if(!waiting) {
                waiting = true;
                promise = getListings(uri, feed, limit);
                promise.then(function(result) {
                    for (var i = 0; i < result.length; i++) {
                        if(links.length < limit) {
                            links.push(result[i]);
                        }
                    }
                    if(links.length < limit) {
                        // Load Pagination
                        uri = paginator.process(uri, feed, opts);
                        waiting = false;
                    } else {
                        resolve(links);
                        loadMore = false;
                    }
                }); 
            } 
        }
});

这就是我目前所拥有的,但它没有正确运行。我需要它做的是遍历原始 URL,然后继续遍历下一页,将 URLS 添加到链接列表。您可以假设分页器工作并返回该特定网站的下一个 URL(例如 www.google.com/page2)getListings 工作正常并返回一个链接数组。

我如何才能将这些 promise 链接起来,以便它可以遍历任意数量的页面(如果存在),并返回它找到的完整链接数组?

当在 promise.then() 中达到限制时,我似乎无法将 loadMore 变量更改为 false。我希望它能够通过第一个 URL,然后通过下一个 URL,直到达到限制。

我感谢任何有关如何将其组合在一起的资源或想法。

最佳答案

在你的 promise 中使用递归而不是循环。像这样:

var links = [];
function fetchNext(result) {
    for (var i = 0; i < result.length; i++) {
        if(links.length < limit) {
              links.push(result[i]);
        }
    }

    if (links.length < limit) {
        // Load Pagination
        uri = paginator.process(uri, feed, opts);

        // Recursion
        return getListings(uri, feed, limit).then(fetchNext);
    }
    else {
         return Q.fulfill(links); // Return resolved promise
    }
}

// Start recursion
var promise = fetchNext([]);
// or var promise = getListings(uri, feed limit).then(fetchNext);

关于javascript - 通过 URLS 的 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30630332/

相关文章:

javascript - 在angularjs中链接资源

javascript - 无法从 Node 模块中的异步 waterfall 获取返回值

javascript - 使用 lodash debounce 返回 promise

javascript - 获取一个大字符串中分隔符之间的所有子字符串

python - beautifulsoup 4 : Segmentation fault (core dumped)

web-scraping - 使用美丽汤的请求被阻止

javascript - javascript中的链式 promise

javascript - 在关闭另一个 Bootstrap 模式后打开 Bootstrap 模式 - 意外行为

javascript - href 和 ng-click 在移动设备上的同一个标签中不起作用

python - 如何保留字符串中的 '\n 字符?