运行 在 nodeJs 中与动态参数串联的函数

Run function in series with dynamic arguments in nodeJs

目标:(已解决:更新了下面的工作代码)

  1. 创建一个 urls
  2. 的数组
  3. 创建一个接受单个 url 的函数,向该 url 发出请求,并将一些数据写入文件
  4. 运行 上面的函数针对数组中的每个 url 多次串联。

节点依赖:请求、Cheerio、异步、fs

这是我目前的情况:

//load dependencies
var request = require("request"),
    cheerio = require("cheerio"),
    fs = require('fs'),
    async = require('async'),
    wstream = fs.createWriteStream('./model/data.txt');


//create url array
var arr = [];
for (var i = 0; i < 10; i++){
    arr.push('http://www.test.com/' + i)
}

//function that gets data from url and creates write stream
function getUrlData(url, callback){
    request(url, function (error, response, body) {
        if (!error && response.statusCode == 200) {
            var $ = cheerio.load(body);
            var data = $('h1').html();
            wstream.write(data);
            callback();
        }
    });
}

//close write stream
function endStream(){
    wstream.end();
}

//updated working version
async.eachSeries(arr,getUrlData,endStream);

由于您希望 getUrlData 顺序执行,因此您需要向 getUrlData 添加一个回调:

function getUrlData(url, callback){
    request(url, function (error, response, body) {
        if (!error && response.statusCode == 200) {
            var $ = cheerio.load(body);
            var data = $('h1').html();
            wstream.write(data);
            callback();
        }
        callback(error);
    });
}

然后使用每个系列:

async.eachSeries(arr, getUrlData, endStream);