Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript获取多个页面_Javascript - Fatal编程技术网

Javascript获取多个页面

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

有一个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(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一次性请求所有页面。