将变量传递给回调 - nodejs

时间:2017-10-03 14:40:33

标签: javascript node.js

我正在创建一个简单的Messenger bot,使用非官方的Facebook Chat API(https://github.com/Schmavery/facebook-chat-api)和Node.js。

目前,我正在努力在特定时间向特定用户发送消息。这是我的代码的一部分:

if(msgdate.getTime() <= currdate.getTime()){

    console.log(alarms[i].message);
    // output: test

    api.getUserID(alarms[i].user, (err, users) => {
        if(err) return console.error(err);

        api.sendMessage(alarms[i].message, users[0].userID);
        // TypeError: Cannot read property 'message' of undefined
    });
}

而且,我的问题是:如何将 alarm 数组传递给此回调,以便我能够向特定用户发送消息?

2 个答案:

答案 0 :(得分:1)

看起来您在某处更改了i变量,因此在调用回调时alarms[i]未定义。您需要将alarms[i]存储在新变量中并在回调中使用它:

let alarm = alarms[i];
api.getUserID(alarm.user, (err, users) => {
  if(err) {
    return console.error(err);
  }
  api.sendMessage(alarm.message, users[0].userID);
});

答案 1 :(得分:0)

出现在外面使用for循环。尝试以这种方式传递你的var:

var alarm = alarm[i];
(function (alarm) {
    if(msgdate.getTime() <= currdate.getTime()){

    console.log(alarm.message);
    // output: test

    api.getUserID(alarm.user, (err, users) => {
        if(err) return console.error(err);

        api.sendMessage(alarm.message, users[0].userID);
        // TypeError: Cannot read property 'message' of undefined
    });
})(alarm);

也许你还需要传递其他变种。只需输入逗号和其他var,例如:

(function (alarm, user){
    // your code here
})(alarm, user);