[英]local variables between multiple requests in javascript and node.js
我用javascript和node.js編寫了此腳本,該腳本使用node.js進度和請求( https://github.com/request/request )包下載了許多文件。 多個請求被觸發。 我的問題是,關於on('response',function)中定義的變量“ bar”和“ chunks”的變量范圍對於該事件及其內部的on('data')事件/功能是局部的,還是可能有多個獲取請求正在更新同一進度條。 我想我由於node.js和javascript的異步/事件驅動性質而感到困惑。
基本上這是代碼:
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聲明了變量,並且在響應事件中聲明了它們,因此每次觸發該事件時,都會有名稱chunk
和bar
設置為新的變量,因此它們不會更新相同的進度欄,而是更新新進度條被創建。 如果您要更新同一進度條,則有兩個選擇,
聲明變量而不在變量中使用var。 恩。 chunks = [];
要么
這些變量是在函數內部定義的,因此在回調之間不會有任何問題或共享。 如果要在回調之間共享某些內容,則應在回調范圍之外聲明變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.