Nodo.js múltiples funciones dentro de la solicitud

Intenté eliminar los datos dentro de la solicitud única como en el código de abajo, pero no funciona. Cuando probé un solo procedimiento funcionó. ¿Cómo llamar a múltiples procedimientos dentro de un procedimiento de solicitud?

var fs = require('fs'); var request = require('request'); var cheerio = require('cheerio'); var link = "www.google.com"; request(link, function (error, response, html) { if (!error && response.statusCode == 200) { var $ = cheerio.load(html); //scrape class $('.someclass').filter(function () { var data = $(this); var description = data.html(); //write data to file fs.appendFile('description.txt', description + "\n", function (err) { if (err) throw err; }); }); //scrape class1 $('.someclass1').filter(function () { var data = $(this); var description1 = data.html(); //write data to file fs.appendFile('description1.txt', description1 + "\n", function (err) { if (err) throw err; //console.log('The "description" was appended to file!'); }); }); //scrape class2 $('.someclass2').filter(function () { var data = $(this); var description2 = data.html(); //write data to file fs.appendFile('description2.txt', description2 + "\n", function (err) { if (err) throw err; //console.log('The "description" was appended to file!'); }); }); } }); 

El filtro no está haciendo lo que piensas que es. Usted está buscando .each (). Filtro toma una lista y devuelve una lista más pequeña. Cada itera sobre los elementos.

 function writeToFile($, methodStr, fileName, modifyFunc) { return function () { // Whoever calls this function gets its innerhtml written to whatever // fileName is passed to the outer function. var text = $(this)[methodStr]() + "\n"; if (typeof modifyfunc === 'function') { text = modifyFunc(text); } fs.appendFileSync(fileName, text); }; } 

Entonces aplícalo así

 request(link, function (error, response, html) { if (!error && response.statusCode == 200) { var $ = cheerio.load(html); // these each statements say that for every element that has .someclass // give it the inner function in writeToFile where fileName is description.txt $('.someclass').each(writeToFile($, 'text', 'description.txt')); $('.someclass1').each(writeToFile($, 'html', 'description1.txt')); $('.someclass2').each(writeToFile($, 'text', 'description.txt2', function (str){ return str + "Here is a change that will also get written to the file"; })); } }