Это стандартная проблема изменения вашей переменной в области видимости, а область не соответствует ожидаемой.
const request = require("request");
var fs = require('fs');
var list = fs.readFileSync("list.txt", "utf-8").split("\n");
var i;
for (i of list) {
(function(id) {
request({
method: "GET",
url: "https://steamcommunity.com/id/" + id,
}, (error, response, body) => {
if (body.match("The specified profile could not be found.")) {
console.log(id + "not taken");
} else {
console.log(id + "taken");
}
})
})(i);
}
Поскольку нет разницы в объеме между внешним элементом (цикл for
) и обработчиком вашего запроса, переменная i
изменится к моменту окончания запроса. Я добавил замыкание в ваш код, чтобы убедиться, что в этой лексической области присутствует копия этой переменной, чтобы ваш обработчик знал, к какому идентификатору он обратился.
Есть более чистые способы сделать это. В частности, вы могли бы использовать итератор, чтобы упростить это.