提问人:aspirinemaga 提问时间:3/31/2023 更新时间:3/31/2023 访问量:26
使用 node.js 中提供的回调参数侦听事件
Listening to events with a provided callback param in node.js
问:
我的 node.js 服务器连接到 websocket。它不断发送:Events.emit('ws-price', data)
从 js 文件的另一部分,我们可以开始和停止侦听这些事件。为了能够 removeListener - 应对 和 使用相同的回调函数。Events.on
Events.off
如何在回调方法的“run”和“stop”函数中访问提供的“bot”参数?
const Events = require('../services/events')
module.exports = {
run: async (bot) => {
Events.on('ws-price', callback(event, bot)) // <--- pass "bot" variable
},
stop: async (bot) => {
Events.off('ws-price', callback(event, bot)) // <--- pass "bot" variable
}
}
const callback = (event, bot) => {
console.log(bot?.id, event) // How to access "bot" here ?
}
我收到错误:ReferenceError: event is not defined
答:
2赞
T.J. Crowder
3/31/2023
#1
您必须创建一个包装函数,该函数在调用时关闭该函数,同时使用 和 接收。然后记住该函数,以便在调用时将其删除(Map
对此很有好处):bot
callback
bot
event
stop
// A map of the current callbacks (have been `run` and not `stop`ped)
const callbacks = new Map();
module.exports = {
run: async (bot) => {
const cb = (event) => callback(event, bot);
callbacks.set(bot, cb);
Events.on("ws-price", cb);
},
stop: async (bot) => {
const cb = callbacks.get(bot);
if (cb) {
callbacks.delete(bot);
Events.off("ws-price", cb);
}
},
};
评论
0赞
T.J. Crowder
3/31/2023
(哎呀,停止
呼叫时有轻微的编辑错误。如果您没有看到 Events.off(“ws-price”, cb);,
请点击刷新。
0赞
aspirinemaga
3/31/2023
谢谢,它应有尽有。我必须替换 to 的 Map 键才能使其工作,就像一个对象一样,我没有提到这一点。bot
bot.id
bot
0赞
T.J. Crowder
4/1/2023
@aspirinemaga - 在 .但是,如果它们具有唯一的 ID,并且您想改用这些 ID,那也有效。:-)Map
评论