javascript和node.js中的多个请求之间的本地variables

我用javascript和node.js编写了这个脚本,它使用node.js进度和请求( https://github.com/request/request )包来下载一堆文件。 多个请求正在被解雇。 我的问题是,如果在on('response',function)中定义的variables“bar”和“chunks”的variables范围对于该事件是本地的,并且在其内部是on('data')事件/有可能多个获取请求正在更新相同的进度条。 我想我因为node.js和javascript的asynchronous/事件驱动性质而感到困惑。

基本上这是代码:

var i; var request = require('request').defaults({jar:true}); var ProgressBar = require('progress'); var fs = require('fs'); for (i in links){ var link = links[i]; request.get(link).on('response',function(response){ var disp = response.headers['content-disposition']; var filename = disp.substring(disp.indexOf('filename="')+'filename="'.length,disp.length-1) var chunks = []; var len = parseInt(response.headers['content-length'], 10); var bar = new ProgressBar(' downloading [:bar] :percent :etas', {total: len }); response.on('data',function(chunk){ bar.tick(chunk.length); chunks.push(chunk); }); response.on('end',function(){ console.log('writing file '+filename); var file = new Buffer.concat(chunks); f = fs.writeFileSync('/home/dolf/Documents/space_projecten/Elektor/'+filename,file) }); }); } 

你已经使用var来声明variables,并且你正在响应事件中声明它们,所以每当事件被触发时,都会有新的variables,名称为chunkbar set,所以它们不会更新同一个进度条,而是一个新的进度酒吧被创build。 如果你想更新相同的进度条,你有两个选项,

  1. 声明variables而不使用var。 恩。 chunks = [];

    要么

  2. 在响应callback函数之外声明它们

这些variables是在你的函数内部定义的,因此在callback之间不会有任何问题或共享。 如果你想在你的callback之间分享一些东西,你应该在callback范围之外声明你的variables。