Javascript获取多个页面
有一个url:“http:/myurl/mydata/pages/” 任务是调用url+“1”,url+“2”,…,直到没有对应的页面,页面数未知 我不确定这个决定的设计。我知道我可以使用“异步等待”方法,我可以避免吗?下一种方法行吗Javascript获取多个页面,javascript,Javascript,有一个url:“http:/myurl/mydata/pages/” 任务是调用url+“1”,url+“2”,…,直到没有对应的页面,页面数未知 我不确定这个决定的设计。我知道我可以使用“异步等待”方法,我可以避免吗?下一种方法行吗 let url= "http:/myurl/mydata/pages/"; let finished=true; let page=1; let datas={}; while(!finished) { fetch(url+page) .then(fun
let url= "http:/myurl/mydata/pages/";
let finished=true;
let page=1;
let datas={};
while(!finished) {
fetch(url+page)
.then(function(data) {
collectData(page,data);
page+=1;
})
.catch(function(error) {
finished=true;
});
}
function collectData(page,data){
datas[page]=data;
}
我可以使用承诺来完成这项任务吗?这看起来像是递归的工作
let url= "http:/myurl/mydata/pages/";
let page=1;
let datas={};
recurse().then(/*...*/)
function recurse() {
return new Promise(function(resolve, reject) {
fetch(url+page)
.then(function(data) {
collectData(page,data);
page+=1;
return recurse()
})
.catch(function(error) {
resolve()
});
})
}
function collectData(page,data){
datas[page]=data;
}
注意:我没有测试这个,所以可能无法完全按照编写的那样工作。但它应该会让您走上正确的道路。如果您想要异步等待方法:
async function fetchPages(url, page) {
try{
const data = await fetch(url+page);
collectData(page+url, data);
await fetchPages(url, page + 1);
} catch(e) {
return 'Its over';
}
}
};
为什么要这样做?F.e.要创建脱机版本的数据集,这是否回答了您的问题?似乎你想废弃一些网站,如果是这样的话,你可以使用Cheerio.js()如果它是用来创建离线版本的数据,那么你可能想使用某种搜索算法来查找第一个页面的数量。例如,如果最后一页有数百页,可以尝试对其进行二进制搜索。如果我在许多URL上运行这个,我就不想等待每个请求。找到最后一页后,如果没有限制,可以使用Promise.all一次性请求所有页面。