簡體   English   中英

javascript和node.js中多個請求之間的局部變量

[英]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聲明了變量,並且在響應事件中聲明了它們,因此每次觸發該事件時,都會有名稱chunkbar設置為新的變量,因此它們不會更新相同的進度欄,而是更新新進度條被創建。 如果您要更新同一進度條,則有兩個選擇,

  1. 聲明變量而不在變量中使用var。 恩。 chunks = [];

    要么

  2. 在響應回調函數之外聲明它們

這些變量是在函數內部定義的,因此在回調之間不會有任何問題或共享。 如果要在回調之間共享某些內容,則應在回調范圍之外聲明變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM