【问题标题】:How to run an inline-function twice?如何两次运行内联函数?
【发布时间】:2022-10-06 01:08:49
【问题描述】:

我正在使用 Gametime.js 进行实时世界聊天。

消息存储在数据库中。

Gametime.js 使用 PubNub,出于某种原因,PubNub 需要将消息发送两次,所以它确实做到了。

如何使函数运行两次?

我试过这个:

for (let i = 0; i < 2; i++) { gametime.run("msg", [msg]) }

它有效,只是我经常在我的脚本中这样做,所以有没有办法在没有 for/while 循环的情况下做到这一点?

这是我想要实现的示例:

// inline code, cannot run for loop right here
function example(msg) { doSomething(), doSomethingElse, {{run twice}}, done() }

【问题讨论】:

  • 弄清楚为什么需要发送两次消息,而不是试图解决实际问题。
  • 出于任何 PubNub 目的,没有理由两次运行该函数。好奇地了解实际问题。
  • 我在您的代码 sn-p 中没有看到任何 PubNub API。你能分享一下 PubNub 代码吗?
  • @CraigConover Gametime.js 使用内置的 PubNub。在控制台中(在我的任何游戏或聊天室中)它会在消息之间给我一个错误:Error: PubNub call failed. Check status for details。间隔是 12 小时还是 1 秒并不重要,它只是不会发送两次。这就是为什么我需要运行它两次,这样我才能确保其他人能够真正得到消息。出于调试目的,脚本是正确的here
  • 很酷,无法提供任何见解,但这是不正常或预期的。绝对是客户端的东西。如果您enable PN SDK logging 并复制并将其发送到 [PN 支持](support@pubnub.com),我们可能会弄清楚(它是免费的,我们会很乐意知道是什么原因造成的 - 可以打赌它是'不是 PN SDK 或网络,只是一些微妙的东西)。

标签: javascript function loops pubnub


【解决方案1】:

您可以创建另一个函数,它将运行您的函数两次,如下所示:

function twice (callback) {
  callback();
  callback();
}

twice(() => console.log('hello'));

但是,如果您遇到必须调用函数两次才能获得所需结果的情况,那么听起来某处还有另一个问题(在您未显示的某些代码中)。

【讨论】:

    【解决方案2】:

    尝试覆盖 run 方法,听起来两次调用该方法是一个错误,如果它得到修复,这将很容易退出。

    gametime.oldRun = gametime.run;
    
    gametime.run = (...params) => {
      this.oldRun(...params);
      this.oldRun(...params);
    };
    

    如果内部方法调用 run 可能会导致问题,因此您可以创建 run2

    gametime.run2 = (...params) => {
      this.run(...params);
      this.run(...params);
    };
    

    通过查找和替换仍然很容易退出。

    【讨论】:

      猜你喜欢
      • 2020-11-29
      • 2021-06-29
      • 1970-01-01
      • 2015-07-06
      • 2021-10-06
      • 1970-01-01
      • 1970-01-01
      • 2022-09-23
      • 2021-04-10
      相关资源
      最近更新 更多