Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.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_Node.js_Httprequest - Fatal编程技术网

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');