Javascript 如何附加到文件而不重复(对于循环)?
因此,我想将Javascript 如何附加到文件而不重复(对于循环)?,javascript,node.js,httprequest,Javascript,Node.js,Httprequest,因此,我想将links数组中的所有内容附加到一个文本文件:links.txt。问题是它将所有内容追加到循环所经过的迭代次数的后面。我已尝试将fs.appendFileSync放在外部,但我需要它来满足请求承诺 代码如下: for (i = 1; i < 3; i++) { var options = { uri: 'https://www.collegeconfidential.com/dean/page/' + i, transform: function(body) {
links
数组中的所有内容附加到一个文本文件:links.txt
。问题是它将所有内容追加到循环所经过的迭代次数的后面。我已尝试将fs.appendFileSync
放在外部,但我需要它来满足请求承诺
代码如下:
for (i = 1; i < 3; i++) {
var options = {
uri: 'https://www.collegeconfidential.com/dean/page/' + i,
transform: function(body) {
return cheerio.load(body);
}
};
rp(options).then(function($) {
$('main#main > article.post').each(function() {
// Fetches each question title, link, and adds a new line
var maintxt = $(this).find('h3.entry-title > a');
console.log("Question: " + maintxt.text().trim() + '\n' + "Link: " + maintxt.attr('href') + '\n\n');
questions.push(maintxt.text().trim());
links.push(maintxt.attr("href"));
});
// console.log(questions);
// console.log(links);
}).then(function ($) {
fs.appendFileSync('links.txt', links);
console.log(links);
}).catch(function(err) {
// Crawling failed or Cheerio choked...
console.log('Crawling failed or Cheerio choked')
});
}
(i=1;i<3;i++)的{
变量选项={
uri:'https://www.collegeconfidential.com/dean/page/"我,,
转换:功能(主体){
返回车重(车身);
}
};
rp(选项)。然后(函数($){
$('main#main>article.post')。每个(函数(){
//获取每个问题的标题、链接并添加新行
var maintxt=$(this.find('h3.entry-title>a');
console.log(“问题:“+maintx.text().trim()+”\n“+”链接:“+maintx.attr('href')+”\n\n”);
push(maintxt.text().trim());
links.push(maintxt.attr(“href”);
});
//控制台日志(问题);
//控制台日志(链接);
})。然后(函数($){
fs.appendFileSync('links.txt',links);
控制台日志(链接);
}).catch(函数(err){
//爬行失败或Cheerio窒息。。。
console.log('爬网失败或阻塞')
});
}
尽管此循环并不理想……如果不想修改数组,只需在数组中添加最后添加的链接即可
替换:
fs.appendFileSync('links.txt', links);
与:
例如,如果循环运行两次,那么fs.appendFileSync代码将运行两次。我将有两份相同代码的副本。我如何将for循环放入请求中,并让fs.appendFileSync等待承诺?在将数组写入文件时,您期望得到什么?那么,您认为只将数组的最后一项追加到文件中会有效吗?如果您确实不希望所有内容都是循环所经历的迭代次数的倍,你不能在每次调用
fs.appendFileSync('links.txt',links')后清除你的链接吗代码>?比如while(links.length){links.pop();}
也许吧?谢谢Justin,这很有效,很有意义!
fs.appendFileSync('links.txt', links[links.length-1]+'\n');