我试图制作一个网络浏览器(教育用途),我真的很远,但这个小问题困扰着我。
我发出了一个请求回调函数,我试图让75-78行工作。但是要使其工作,我需要PDF_LISTS和PDF_LINKS来初始化为正确的值。
我已经尝试过将它们作为全局变量,但由于某种原因,它不起作用。所以我的问题是:如何创建一个回调函数来调用for循环(75-78)并成功地将PDF_LISTS和PDF_LINKS初始化为正确的值?
(不要担心我在教育内容上使用此功能,并获得教授的许可)。第一次在这里发帖!
// URL_LINKS has the pdf links of the pages
PDF_LINKS = [];
// URL_LIST has the names of the pdf links
PDF_LIST = [];
function fillPDF(callback) {
request(url, function(err, res, body) {
$ = cheerio.load(body);
links = $('a'); //jquery get all hyperlinks
$(links).each(function(i, link) {
var value = $(link).attr('href');
// creates objects to hold the file
if (value.substring(value.length - 3, value.length) == "pdf") {
PDF_LINKS[i] = $(link).attr('href');
PDF_LIST[i] = $(link).text();
}
})
});
}
// must decleare fillPDF variable or else you wont initilze teh variables
fillPDF() {
//HERE I WANT PDF_LINKS and PDF_LIST to be intialized to 33.....
}
for (j = 0; j < PDF_LIST.length; j++) {
request(PDF_LINKS[j]).pipe(fs.createWriteStream(PDF_LIST[j]));
}
&#13;
答案 0 :(得分:0)
您可以使用array's push method将值推送到数组中,避免数组元素未定义。
您可以将最终的for循环放入函数中,然后使用fillPDF();
请求结束后,您还需要调用fillPDF的回调。
PDF_LINKS = [];
PDF_LIST = [];
function fillPDF(callback) {
request(url, function(err, res, body) {
$ = cheerio.load(body);
links = $('a');
$(links).each(function(i, link) {
var value = $(link).attr('href');
if (value.slice(-3) == "pdf") {
PDF_LINKS.push(value);
PDF_LIST.push($(link).text());
}
})
callback();
});
}
function writePDF() {
for (j = 0; j < PDF_LIST.length; j++) {
request(PDF_LINKS[j]).pipe(fs.createWriteStream(PDF_LIST[j]));
}
}
fillPDF(writePDF);