运行 在 nodeJs 中与动态参数串联的函数
Run function in series with dynamic arguments in nodeJs
目标:(已解决:更新了下面的工作代码)
- 创建一个 urls
的数组
- 创建一个接受单个 url 的函数,向该 url 发出请求,并将一些数据写入文件
- 运行 上面的函数针对数组中的每个 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);
目标:(已解决:更新了下面的工作代码)
- 创建一个 urls 的数组
- 创建一个接受单个 url 的函数,向该 url 发出请求,并将一些数据写入文件
- 运行 上面的函数针对数组中的每个 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);