【问题标题】:create a foreach with an mysql result创建一个带有 mysql 结果的 foreach
【发布时间】:2020-05-09 18:35:02
【问题描述】:

我想使用 SteamID 检查个人资料。为此,我从我的数据库中获得了 SteamID64,现在我尝试检查每个 ID。

基本上它应该将数据库中的 SteamID64 设置为一个 var,执行代码(简单示例 console.log(steamidvar);)并重复它,直到没有更多的 SteamID64 剩下。

这是我正在使用的一些代码:

con.connect(function(err) {
    if (err) throw err;
    con.query("SELECT SteamID64 FROM Users", function (err, result, fields) {
      if (err) throw err;
      console.log(result);
    });

这就是我得到的输出:

[ RowDataPacket { SteamID64: 765611xxxxxxxxxxx },
  RowDataPacket { SteamID64: 765611xxxxxxxxxxx } ]

所以一切都还算正常,但我需要过一段时间才能得到它们(不知道它是否这样调用,我在 php 中已经习惯了),因此 var resultsteamid 是 SteamID64。

var account_id = new SteamID(resultsteamid);

我的代码 rn:https://pastebin.com/raw/pUxnfjbR

【问题讨论】:

  • 如果 result 包含您想要的 id 列表,为什么要为每个查询?在console.log(result) 之后做var steamIds = result.map(r => new SteamID(r.RowDataPacket.SteamID64));...
  • @HereticMonkey 也许我理解错了,但我想重复一些事情,直到我一无所有。因此,如果我有 10 个 SteamID,那么对于每个 SteamID,都应该执行相同的过程,直到用完为止。
  • 从这个问题上根本看不清楚......
  • 是的,我给出了一个 php 示例,因为我明白 :D 但是你还有解决方案吗?
  • 不,因为我不明白这个问题。请edit您的问题与所有要求。

标签: javascript node.js


【解决方案1】:

您可以从console.log 看到result 只是一个行数组。 Javascript 有很多方法可以遍历数组。您已指定希望每个 steamID 都放入变量“resultsteamid”中,因此for..of 或任何数组助手将在这里为您提供帮助:

对于..of

con.connect(function(err) {
  if (err) throw err;
  con.query("SELECT SteamID64 FROM Users", function (err, rows, fields) {
    if (err) throw err;
    for(let row of rows) {
      let resultsteamid = row.SteamID64;
      let account_id = new SteamID(resultsteamid);
      //use account_id however you want
    }
  });
});

forEach

con.connect(function(err) {
  if (err) throw err;
  con.query("SELECT SteamID64 FROM Users", function (err, rows, fields) {
    if (err) throw err;
    rows.forEach(function(row) {
      let resultsteamid = row.SteamID64;
      let account_id = new SteamID(resultsteamid);
      //use account_id however you want
    });
  });
});

【讨论】:

  • 谢谢!这就是我想要的:D 不幸的是,如果我想使用“让 account_id = new SteamID(resultsteamid);
  • 不客气!类型错误是一类非常广泛的错误,在讲述错误时,发布实际的错误消息非常有帮助,这样我们就可以知道出了什么问题
  • 哦,是的,当然:pastebin.com/raw/dzJVPquQ 我控制台中的 resultsteamid 也是黄色的,也许这可能是问题所在? /root/node_modules/mysql/lib/protocol/Parser.js:437 抛出错误; // 重新抛出非 MySQL 错误 ^ TypeError: input.match is not a function
  • 抱歉,我无法查看此网络上的 pastebin 链接,但我的意思是错误消息(不是堆栈跟踪),它应该足够短,可以粘贴在此处或编辑到您的问题中
  • @Schmaniel SteamID 可能太大,JavaScript 无法正确表示。我认为您需要以不同的方式拉动它们,请参阅this question
【解决方案2】:

您可以在 javascript 中使用 Interval:

setInterval(()=>{
  console.log("CHECK THE MYSQL DATA")
}, 60000)

这段代码每分钟运行一次(60,000 毫秒)。

更好的方法是使用命名空间定义变量,这样您也可以根据需要取消它。

const checkData = setInterval(()=>{
  console.log("CHECK THE MYSQL DATA")
}, 60000);

// Then when you want to cancel it:
clearInterval(checkData);

【讨论】:

  • 这是有道理的,而且很简单 :) 但实际上我在使用 while 函数时遇到了更多问题(idk 它的名称,但也可能是 foreach)来获取 SteamID 的 var,它可以只有一个或两个,但有时数据库中有数百个 ID...
  • 你能解释一下没有任何代码的工作流程吗?应该发生的过程是什么?我没有完全关注你。
  • 我想创建一个 Steam 机器人来检查 csgo 玩家资料。所有的 SteamID 都在我的数据库中,这就是目前为止的代码:pastebin.com/raw/pUxnfjbR 所以机器人应该检查来自 mysql SELECT 的每个 SteamID。我希望这更清楚:)
猜你喜欢
  • 2020-06-10
  • 2014-01-16
  • 2023-03-22
  • 1970-01-01
  • 2019-06-28
  • 1970-01-01
  • 2019-03-01
  • 2014-01-26
  • 2018-08-14
相关资源
最近更新 更多