回调不是NodeJS的功能

时间:2017-02-27 12:08:09

标签: javascript node.js lambda callback

我是NodeJS的新手,但我也在努力在函数之间传递变量/对象的概念。我很欣赏任何有关我做错事的帮助。

请考虑以下代码:

来电请求:

{ 
    sender: '32165498732165845',
    text: 'shopping',
    originalRequest: 
    { 
        sender: { id: '32165498732165845' },
        recipient: { id: '87971441647898' },
        timestamp: 1488196261509,
        message: { mid: 'mid.1488196261509:c7ccb7f608', seq: 36372, text: 'shopping' } 
    },
    type: 'facebook' 
}

提取相关变量:

var userId = request.sender;
var listName = request.text;

bot.js:

var listOps = require('./listops/test.js');
listOps.setActive(function (userId, listName, callback) {
    console.log ('Here I expect a callback!');
    return callback; // This will send the message back to user.
});

listops / test.js:

exports.setActive = function(userId, listName, callback) {
    var message = "User number " + userId + " asks to create a list with name " + listName + ".";
    console.log(userId);
    console.log(listName);
    callback (message);
}

现在我的问题是,在listOps.js中,两个控制台日志的结果都不是我期望的值,它表示[Function]undefined。因此我怀疑,这是错误消息[TypeError: callback is not a function]的根本原因。

我在Lambda中使用Claudia.js。

2 个答案:

答案 0 :(得分:0)

尝试将 bot.js 更改为以下内容:

var listOps = require('./listops/test.js');

listOps.setActive( userId, listName, function (message) {
      console.log ('message holds the result set in listops/test.js!');
});

如果您想在之后处理该消息,您只需将其传递给另一个函数:

<强> bot.js

var listOps = require('./listops/test.js');

var processor = function(userId, listName, message){
     ... process as desired
}

listOps.setActive( userId, listName, function (message) {
      console.log ('message holds the result set in listops/test.js!');
      process(userId, listName, message);
});

答案 1 :(得分:0)

这种情况正在发生,因为在 listops / test.js 文件中,您定义的函数exports.setActive = function(userId, listName, callback)接受三个参数userId listName和{{1当您在 bot.js 文件中调用此函数时,您只传递一个函数callback,这是 setActive 函数定义所预期的非法操作。您需要调用此函数,如下所示

listOps.setActive(function (userId, listName, callback) {