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',函数)中定义的变量"bar"和"chunks"的变量范围是否是该事件及其内部的on('data')事件/功能的本地,或者可能有多个get请求正在更新相同的进度条。我想我感到困惑,因为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 = [];
或
- 在响应回调函数之外声明它们
这些变量是在函数内部定义的,因此回调之间不会有任何问题或共享。如果你想在回调之间共享一些东西,你应该在回调范围之外声明你的变量。
相关文章:
- 是否可以缓存可下载的文件,并在XHR和非XHR请求之间共享该缓存
- Node.js HTTP/NET——连接和请求之间的区别
- Node.js&两个请求之间的Express/Can上下文切换可以是同步代码
- 使秒表在请求之间处于活动状态
- 如何识别源自JS脚本的http请求与HTML
- Google Geocoder 在 url 和 javascript 请求之间有不同的结果
- JavaScript 和 node.js 中多个请求之间的局部变量
- 用户请求和AJAX/资源请求之间的差异
- Express会话变量don'不会在请求之间持久存在
- 使用jquery ajax的两个CORS请求之间的时间间隔
- 在单元测试中,当[method]语句在请求之间时如何改变$httpBackend
- Node/commonJS可以“private”;请求之间的变量泄漏
- Express - Session不会在后续SSE请求之间被保存
- Node.js或其他JS服务器技术是否支持请求之间的本机共享内存而不需要序列化?
- 如何查找两个连续请求之间经过的时间
- jQuery AJAX请求之间的时间延迟
- 我应该如何最好地跟踪页面请求之间的计时器
- JS-设置发送AJAX请求之间的延迟
- 这两个请求之间的区别
- YouTube的请求和我的请求之间的区别