在NodeJS中跨事件回调共享变量

时间:2016-05-20 18:42:00

标签: javascript node.js facebook-messenger

我正在尝试使用messenger-bot模块构建FB messenger机器人。这是我的示例代码

bot.on('message', (payload, reply) => {
  let userData = payload.message.text;

  bot.getProfile(payload.sender.id, (err, profile) => {
    if (err) {
        console.log(err);
        // throw err
    }
    else {
        text = {
            "attachment":{
                "type":"template",
                "payload":{
                    "template_type":"button",
                    "text":"Pick an option?",
                    "buttons":[
                        {
                            "type":"postback",
                            "title":"Option 1",
                            "payload":"first_option"
                        },
                        {
                            "type":"postback",
                            "title":"Option 2",
                            "payload":"second_option"
                        }
                    ]
                }
            }
        };
        postBack(text, payload.sender.id, profile);
    }
  });
});

bot.on('postback', (payload, reply) => {
    let text = payload.postback.payload;
    bot.getProfile(payload.sender.id, (err, profile) => {
        //Do something with the userData and the selected option
    });
})

现在如何在userData的事件回调中访问"postback"?我只想到以下解决方案

userData作为选项有效负载的一部分传递,例如

"buttons":[
    {
        "type":"postback",
        "title":"Option 1",
        "payload":"first_option||"+userData
    }

并在"postback"回调中再次解析。

有更好的方法吗? 换句话说,如何在NodeJS / JavaScript中的回调中共享变量?

1 个答案:

答案 0 :(得分:1)

假设这需要为多个用户提供服务,因此无法将您的userData范围更高,您需要将其保存在数据库/缓存中并从“回发”中查询它,或者使用您的想法使其成为有效负载的一部分。 / p>