有谁知道request模块支持什么事件吗? - CNode技术社区

有谁知道request模块支持什么事件吗?
发布于 10 年前 作者 tcstory 4967 次浏览 最后一次编辑是 9 年前 来自 问答

模块的地址在这里https://github.com/request/request 问题是这样的,我写了一个zol壁纸下载器,使用async来控制并发,然后通过监听request的error responseend的事件来控制下载的过程 我通过在end事件里调用callback()来通知async图片已经下载好了,并使用pipe()方法来把图片存到本地 通过在error事件里调用callback()来通知async下载过程已经结束 问题在与,在出现网络错误的时候,会依次触发error事件和end事件,导致callback()会被重复调用,这个问题该怎么办呢

部分代码在这里

function downloadImgs(callback, result) {
 if (!fs.existsSync('download_pictures/')) {
 fs.mkdirSync('download_pictures');
 }
 var img_urls = result['get_img_urls'];
 var index = 0;
 console.log('正在下载壁纸....');
 async.eachLimit(img_urls, 5, function (item, callback) {
 var request_stream = request({
 url: item,
 timeout: 5000,
 headers: {
 'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:39.0) Gecko/20100101 Firefox/39.0'
 }
 });
 request_stream.on('error', function (error) {
 console.log('downloadImgs| 下载 ' + item + '失败| Error: ' + error);
 callback();
 });
 request_stream.on('response', function (response) {
 // 我也不知道有时候response为啥会为空,所以为了避免出现response为空的情况
 // 我使用了事件监听的方式来处理数据
 if (response.statusCode === 404) {
 console.log('downloadImgs| 无效的下载地址 ' + item);
 callback();
 } else {
 request_stream.pipe(fs.createWriteStream('download_pictures/number.jpg'.replace(/number/, index +'')));
 index++;
 // 通过设置end事件监听器,通知async已经完成了pipe方法
 }
 });
 request_stream.on('end', function () {
 callback();
 });
 }, function (error) {
 console.log('所有壁纸下载完毕,请查看download_pictures文件夹');
 })
}
2 回复

这个是报错信息(提示一下,end事件原本会打印字符串end,现在已经被我取消掉了

downloadImgs| 无效的下载地址 http://b.zol-img.com.cn/desk/bizhi/image/6/1366x768/1436945611639.jpg
end
/home/tcstory/WebstormProjects/downloadpics/node_modules/async/lib/async.js:35
 if (called) throw new Error("Callback was already called.");
 ^
Error: Callback was already called.
 at /home/tcstory/WebstormProjects/downloadpics/node_modules/async/lib/async.js:35:31
 at Request.<anonymous> (/home/tcstory/WebstormProjects/downloadpics/app.js:219:13)
 at Request.emit (events.js:129:20)
 at IncomingMessage.<anonymous> (/home/tcstory/WebstormProjects/downloadpics/node_modules/request/request.js:996:12)
 at IncomingMessage.emit (events.js:129:20)
 at _stream_readable.js:908:16
 at process._tickCallback (node.js:355:11)
回到顶部

AltStyle によって変換されたページ (->オリジナル) /