Как вывести 'i' в nodejs - PullRequest
       10

Как вывести 'i' в nodejs

0 голосов
/ 13 января 2019

В настоящее время я пытаюсь увидеть, приняты ли 'steam id'; как я пытаюсь получить хороший .. так что я подумал, что потрачу 5 минут на создание этого маленького сценария, но, что бы я ни пытался, он никогда не выдаст «список»

const request = require("request");
var fs = require('fs');
var list = fs.readFileSync("list.txt", "utf-8").split("\n");

for(i of list){
    request({
method: "GET",
        url: "https://steamcommunity.com/id/" + i,
}, (error, response, body) => {
    if(body.match("The specified profile could not be found.")) {
        console.log(i + "not taken");
    } else {
        console.log(i + "taken");
   }
})
}

скрипт работает; и знает, какое удостоверение личности не взято, а какое ... но проблема в том, что я не вижу удостоверения личности, которые не были взяты - если кто-то может мне помочь, то это будет очень признательно!

1 Ответ

0 голосов
/ 13 января 2019

Это стандартная проблема изменения вашей переменной в области видимости, а область не соответствует ожидаемой.

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 изменится к моменту окончания запроса. Я добавил замыкание в ваш код, чтобы убедиться, что в этой лексической области присутствует копия этой переменной, чтобы ваш обработчик знал, к какому идентификатору он обратился.

Есть более чистые способы сделать это. В частности, вы могли бы использовать итератор, чтобы упростить это.

...