gpt4 book ai didi

javascript - 为什么对象的新实例未定义?

转载 作者:行者123 更新时间:2023-12-01 00:51:36 25 4
gpt4 key购买 nike

我无法使用nodejs在另一个java脚本文件中使用对象的相同实例。

我正在开发一个电报机器人。因为文件变得很大而且很困惑,我想将我的机器人的功能分成几个额外的 js 文件。但我不知道如何在多个 javascript 文件之间共享对象的同一实例。

///////////////////////8Ball File
const {eightBall} = require("./main");
const ballBot = myAwseomeBot;

function eightBall() {

ballBot.onText(/\/8ball/, (msg, callback) => {
let ranNum = Math.floor(Math.random() * 15) + 1;
const chatId = msg.chat.id;
const reply_to_message_id = msg.message_id;
console.log(ranNum);
switch (ranNum) {
case 1:
ballBot.sendMessage(chatId, "Ja");
break;
}
})
}


//main file

let myAwesomeBot = new TelegramBot(botToken, {polling:true});
exports.myAwesomeBot = myAwesomeBot;










ballBot.onText(/\/8ball/, (msg, callback) => {
^
TypeError: Cannot read property 'onText' of undefined

最佳答案

这里的代码中没有显示,但您可能有循环依赖,其中 A requires B,B requires A。

与您的用例相关的最简单的解决方案是在其他文件中为您的机器人定义实现命令,并让您的机器人文件附加/使用它们:

8ball.js

import { telegram stuff } from 'wherever';

export myCommand1 = {
pattern: /\/8ball/,
eventName: 'ontext',
callback: (msg, msgCallback) => { /* use "this" as if it were the bot instance */};
};

main.js

import .... from ....;
import { myCommand1 } from '8ball';

...
bot.onText(myCommand1.pattern, myCommand1.callback.bind(bot));
...

可能还有其他更适合附加通用事件处理程序/监听器的机器人类方法,以及指定模块导出的其他方法,但其想法是您的命令文件不需要导入机器人文件。我还没有研究过 telegram bot API,因此在附加事件处理程序时它可能有某种方式委托(delegate) bot 实例。如果是这样,请使用它!

关于javascript - 为什么对象的新实例未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56926194/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com