当前位置: 首页 > 知识库问答 >
问题:

我如何通过nodejs将值传递给另一个函数?

皇甫逸清
2023-03-14

所以,我试图用discord js和sqlite3做一件事,但在过去的几个小时里,我一直在讨论这个问题,我仍然不知道如何解决它。

  client.countDB = function(discordID) {
    const arr = [];
    db.each(`SELECT count(DiscordID) FROM verification WHERE DiscordID = ${discordID}`, function(err, row){
      if(err){console.log(err); return 0;}
      arr.push(Object.values(row))
      return arr;
    })
    return arr[0];
  };

因此,我试图获取仅在db.each中可用的数据,但我不知道如何将其传递出去,以便返回预期值。我已经尝试过使用全局变量,把它放在更大的范围内,但我仍然不知道如何做到这一点。

对不起,如果我弄糊涂了,我不习惯一直问问题。

编辑:应该说我正在使用NPMSqlite3模块。https://www.npmjs.com/package/sqlite3

共有2个答案

祁聪
2023-03-14

将代码包装在函数中以使其同步,引用

var deasync = require('deasync');

function syncFunc()
{

    let arr;
    client.countDB = function(discordID) {
        db.each(`SELECT count(DiscordID) FROM verification WHERE DiscordID = ${discordID}`, function(err, row){
          if(err){console.log(err); arr = null;return;}
          const tmp = []
          tmp.push(Object.values(row))
          arr = tmp;
        })
      };
    while((arr === undefined))
    {
         deasync.runLoopOnce();
    }
    return arr[0];
}
苏宏逸
2023-03-14

若查询中有数据,最简单的方法就是使用promise。

client.countDB = function(discordID) {
 return new Promise((resolve, reject) => {
  db.each(`SELECT count(DiscordID) FROM verification WHERE DiscordID = ${discordID}`, function(err, row){
    //if you want to throw as an error, reject promise with the incoming error as "reject(err)"
    if(err){console.log(err); return resolve(0);}
    arr.push(Object.values(row))
    return resolve(arr[0]);
  })
 })};

// You can use this as 
client.countDB('someId')
 .then(data => console.log(data))
 .catch(err => console.log(err));
 类似资料:
  • 问题内容: 我不理解以下示例,可以说我具有以下功能: 为什么#1是正确的解决方案,而#2是错误的解决方案?基本上是一个字典,所以如果我想将参数传递给openX,我认为正确的方法是没有并给出字典。但是python显然不喜欢第二个,并告诉我我给了3个而不是2个参数。那么,这背后的原因是什么? 问题答案: 在第二个示例中,您提供3个参数:文件名,模式和字典()。但是Python期望:2个形式参数和关键字

  • 因此,在这里我将basePackages硬编码为“com.example”。这不是我想要的。我想通过命令行参数从终端运行应用程序时接收包名。有没有一种方法可以将命令行参数传递给应用程序,并使用我在BasePackages中接收到的参数?提前致谢

  • 我是selenium初学者,只是想把webDriver传递给另一个类,但没有成功。程序应该打开浏览器(“Google”)并在主类中键入一些单词,在第二个类中应该按下“Google”按钮。 以下是我的主要课程: 这是我想从主驱动程序中使用的类。 当我运行它时,它对我说: 传递:main失败:printOnScreen java.lang.NullPointerException 我做错了什么?谢谢高

  • 我是vue的初学者。我最近开始学习vue。我在vue组件中添加了一个道具。我认为代码似乎是正确的。但发生了一个错误。有人告诉我如何将字符串或数字传递给childComponent,以及如何检查它吗。 应用程序。vue 样品刀身php

  • 问题内容: 我尝试了以下失败的尝试: 在函数a中,我可以使用arguments关键字来访问参数数组,而在函数b中,这些参数将丢失。有没有办法像我尝试的那样将参数传递给另一个javascript函数? 问题答案: 用于对in函数具有相同的访问权,如下所示:

  • 问题内容: 是否可以通过某种方式将一个函数的范围传递给另一个函数? 例如, 我宁愿直接访问变量,即,不使用类似或的任何东西,而只是直接使用或。 问题答案: 真正访问函数私有范围的唯一方法是在函数内部声明,这样就形成了一个闭包,允许隐式访问变量。 这是您的一些选择。 直接访问 在内部声明。 如果您不想在中使用,则可以将它们都放在更大的容器范围内: 这些是您可以直接使用的变量而无需任何额外的代码来移动