首页 > 解决方案 > 如何在nodejs中输出'i'

问题描述

我目前正在尝试查看是否使用了“蒸汽 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");
   }
})
}

脚本有效;并且知道哪个 ID 没有被占用,哪个是.. 但问题是我看不到没有被占用的 ID - 如果有人可以帮助我,那将非常感激!

标签: javascriptnode.jssteam

解决方案


这是您的变量在范围内更改的标准问题,并且范围不是您所期望的。

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结束时变量将发生变化。我在您的代码中添加了一个闭包,以确保此变量的副本存在于词法范围内,因此您的处理程序知道它查询的 ID。

有更清洁的方法可以做到这一点。特别是,您可以使用迭代器来简化它。


推荐阅读