javascript - 如何在nodejs中输出 'i'

标签 javascript node.js steam

我目前正在尝试查看“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");
   }
})
}

脚本有效;并知道哪个 ID 未被占用,哪个 ID 已被占用。但问题是我看不到未被占用的 ID - 如果有人能帮助我,我将不胜感激!

最佳答案

这是一个标准问题,您的变量在范围内发生变化,并且范围不是您期望的范围。

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。

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

关于javascript - 如何在nodejs中输出 'i',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54165526/

相关文章:

javascript - 最好的 jQuery 状态消息插件?

javascript - 如何从 Azure Functions JavaScript 函数中获取更详细的错误消息?

javascript - 如何在 Javascript 井字游戏中切换玩家

javascript - jQuery Scroll 事件在没有实际滚动的情况下触发

javascript - 更改 AngularJS 开始和结束标签

javascript - Steam 交易报价管理器获取项目信息缩短

c++ - 如何编译以便文件名/行号可用于错误报告工具?

node.js - GitHub API - "Get contents"持续返回 404 有效路径

node.js - IE 中未定义“代理”

PHP Steam 机器人 - 如何使用 RSA 登录页面