【问题标题】:Javascript Object returns empty when calledJavascript 对象在调用时返回空
【发布时间】:2021-02-07 07:19:41
【问题描述】:

我的一段代码

const channels = fauna.paginate(q.Match(q.Index("channels"), "true")) // Query FaunaDB database for channel list => create constant called users containing results
const channelList = channels.each(function (page) {
  // Logs the page's contents,
  // for example: [ Ref(Collection("test"), "1234"), ... ]
  console.log(page);
});

工作正常,并表现出应有的表现。但是,当我尝试从代码中的其他地方调用“channelList”时,它会返回 {} 第一段代码中的 console.log 也返回了它应该返回的内容,所以我认为第一段代码没有任何问题。

这是我尝试调用此对象的一段代码

  let options = {
    options: {
      debug: config.twitchConfig.options.debug
    },
    connection: {
      reconnect: config.twitchConfig.options.reconnect,
      secure: config.twitchConfig.options.secure
    },
    identity: {
      username: config.twitchConfig.connection.username,
      password: config.twitchConfig.connection.password
    },
    channels: [JSON.stringify(channelList)] // Attempt to call here, Returns {} (Empty object)
  };

我有什么遗漏吗?这甚至可能吗?如果不可能,我可以使用另一种方法来达到相同的结果吗?

编辑:据我所知,channelList 是基于页面响应的,看起来页面响应是该函数私有的,不能在函数之外引用。我该怎么做才能使其在函数外部可引用,或者创建一个可以在包含相同信息的函数外部访问的常量/变量

【问题讨论】:

  • .each?你的意思是forEach?如果是这样,请注意它返回未定义。还是each 是库方法?
  • @evolutionxbox 在使用 forEach 时只返回“channels.forEach 不是函数”,这就是为什么它没有在那里使用。它在第一个 sn-p 中的方式似乎工作正常,所以我猜它是区区数据库库的一部分
  • 控制台日志返回未定义,所以也许可以尝试将返回的内容放入each 方法中?
  • @evolutionxbox 抱歉,我大部分时间都很笨。返回的东西是什么意思?另外,console.log(page);那是在第一个 sn-p 返回 ['#sniperbotontwitch'] 这是它应该返回的内容,但是当在 channels.each 函数之外调用相同的常量时,它返回 {} 或 [object object] 另外,我已经更新包含我对问题可能是什么的评估的帖子
  • channels的类型是什么? channels[Symbol.iterator] 返回什么?

标签: javascript node.js faunadb


【解决方案1】:

channelList 不是一个函数,更像是一个打印通道的函数的结果..所以在打印分配给它的内容之后就是结果.. 尝试将其假设为一个函数,然后调用它:

const channelList = ()=>{
 channels.each(function (page) {
  // Logs the page's contents,
  // for example: [ Ref(Collection("test"), "1234"), ... ]
  console.log(page);
});
};

channelList();

假设代码本身做你想做的,这应该做的工作

【讨论】:

  • 这让我更接近答案,谢谢!然而,现在当该常量被进一步调用时,它的内容是 ()=>{ channels.each(function (page) { // 记录页面的内容, // 例如:[ Ref(Collection("test") , "1234"), ... ] console.log(page); }); } 而不是简单的 [ 'DATA' ]
  • 第二次你想发生什么?您正在创建函数的字符串..如果要打印通道的值,请在选项之外调用函数..并为通道提供通道 const
  • 是的,我正在尝试打印 Page 的值。你的回答肯定让我更接近我正在寻找的答案。谢谢你,我会继续玩不同的东西,希望我能得到我想要的
【解决方案2】:

经过多次反复试验,我的答案比我或我与之交谈过的任何人想的都简单。

如果您遇到与我相同的问题,以下是有关如何自行解决问题的分步指南。

  1. 使用变量而不是常量
  2. 在设置变量之前声明变量,方法是在设置变量的代码上方放置var channelList;
  3. 使用简单的channelList = page 设置先前声明的变量
  4. console.log(channelList); 只是为了确保一切正常
  5. 最后,在你想要的地方调用变量,瞧!你有你的变量被正确调用,它不返回 {} 或 Undefined 或 [Object Object]

【讨论】:

    猜你喜欢
    • 2021-08-02
    • 1970-01-01
    • 2020-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-05
    • 2023-03-17
    相关资源
    最近更新 更多