如果我在脚本的robot.brain
主体中的module.exports
中初始化属性,则该属性无效(请参见下面的代码)。如果我在响应过程中对其进行了初始化,那么它将起作用。我的假设被hubot-redis-brain覆盖是否正确?如何以一种不错的方式修复它?
module.exports = (robot) => {
robot.logger.debug("Setting the fucking property");
robot.brain.set("stringproperty", "stringvalue");
robot.logger.debug("SET!");
// logs these two entries before 'INFO hubot-redis-brain: Data for hubot brain retrieved from Redis'
const respondAndLog = (res, message) => {
robot.logger.debug("Responding: " + message);
res.reply(message);
};
robot.respond(/get_stringproperty/, (res) => {
respondAndLog(res, `${robot.brain.get("stringproperty")}`);
// prints null. WTF?
});
robot.respond(/get_laterinitializedproperty/, (res) => {
robot.brain.set("laterinitializedproperty", "laterinitializedvalue");
respondAndLog(res, `${robot.brain.get("laterinitializedproperty")}`);
// prints laterinitializedproperty, works OK
});
};
最佳答案
当从redis加载或初始化数据时,hubot-redis-brain
使robot.brain
发出"connected"
事件,请参见[https://github.com/hubotio/hubot-redis-brain/blob/487dd4a9641f35ffb5ae18fb5e1b09e8114c4b70/src/redis-brain.js#L55](see第55和59行)。所以这是应该解决的方法:
robot.brain.on("connected", () => {
robot.logger.debug("Setting the fucking property");
robot.brain.set("stringproperty", "stringvalue");
robot.logger.debug("SET!");
});
关于javascript - 如果我太早在robot.brain中设置值,那么它会被hubot-redis-brain覆盖,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46917666/