这是我在节点的第一周,所以如果这不是一个没脑子的人,我很抱歉。
代码可以正常运行。但我无法弄清楚如何匹配启动http.get whit的名称(url)从网站获得的结果。
我发现这个女巫几乎就像我的问题,除了这是一个预制功能,所以我无法编辑功能并添加回调。
variable scope in asynchronous function
如果我可以运行此代码同步或在http.get函数中进行回调,那么一切都会好的。但我没有技能,也不知道你是否能做到。
由于 - 罗宾。
http = require('http');
function download(name) {
//name is an array whit csgo items names.
for (var i = 0; i < name.length; i++) {
var marketHashName = getGoodName(name[i]);
var url = 'http://steamcommunity.com/market/priceoverview/?currency=1&appid=730&market_hash_name=' + marketHashName;
http.get(url, function (res) {
var data = "";
res.on('data', function (chunk) {
data += chunk;
});
res.on("end", function () {
data = JSON.parse(data);
var value= 0;
//get the value in the json array
if(data.median_price) {
value = data.median_price;
}else{
value = data.lowest_price;
}
value = value.substr(5);
console.log("WEAPON",value);
//callback whit name/link and value?
//callback(name,value);
});
}).on("error", function () {
});
}
}
答案 0 :(得分:1)
您只需添加一个回调参数,然后使用最终数据调用它。并且,如果要将正在处理的特定marketHashName
传递回回调,那么您可以创建一个闭包,以便通过for
循环每次捕获唯一的闭包:
http = require('http');
function download(name, callback) {
//name is an array whit csgo items names.
for (var i = 0; i < name.length; i++) {
var marketHashName = getGoodName(name[i]);
// create closure to capture marketHashName uniquely for each
// iteration of the for loop
(function(theName) {
var url = 'http://steamcommunity.com/market/priceoverview/?currency=1&appid=730&market_hash_name=' + marketHashName;
http.get(url, function (res) {
var data = "";
res.on('data', function (chunk) {
data += chunk;
});
res.on("end", function () {
data = JSON.parse(data);
var value= 0;
//get the value in the json array
if(data.median_price) {
value = data.median_price;
}else{
value = data.lowest_price;
}
value = value.substr(5);
console.log("WEAPON",value);
// now that the async function is done, call the callback
// and pass it our results
callback(theName, value, data);
});
}).on("error", function () {
});
})(marketHasName);
}
}
// sample usage:
download("whatever", function(name, value, data) {
// put your code here to use the results
});
仅供参考,您可能会发现在request
模块之上的http
模块是更高级别的功能集将为您节省一些工作。