我正在尝试找出一种方法来处理动态数量的 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/