Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 回调不是函数NodeJS_Javascript_Node.js_Lambda_Callback - Fatal编程技术网

Javascript 回调不是函数NodeJS

Javascript 回调不是函数NodeJS,javascript,node.js,lambda,callback,Javascript,Node.js,Lambda,Callback,我对NodeJS很陌生,但我也很难理解在函数之间传递变量/对象的概念。我感谢任何对我所做错事的帮助 请考虑这个代码: 传入请求: { sender: '32165498732165845', text: 'shopping', originalRequest: { sender: { id: '32165498732165845' }, recipient: { id: '87971441647898' },

我对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;
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.
});
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);
}
提取相关变量:

{ 
    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;
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.
});
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);
}
bot.js:

{ 
    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;
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.
});
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/test.js:

{ 
    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;
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.
});
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]
未定义。因此,我怀疑这是错误消息
[TypeError:callback不是函数]
的根本原因


我正在Lambda中使用Claudia.js。

尝试将您的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);
});

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

listOps.setActive(userId, listName, function() {
                //your stuffs here
});

您可能想先阅读有关回调的内容,您将
setActive
定义为
函数(userId,listName,callback)
但在bot.js中,您只将匿名函数作为第一个参数传递,如下所示?
listOps.setActive(userId,listName,callback);if(callback){console.log(“我期待回调!”);返回回调;}
看起来很不错,但是…那么回调在哪里呢?回调是listOps.setActive的第三个参数。@DavedeSade第三个参数是一个表达式,在方法调用中回调函数的右边。您可以了解有关函数表达式和函数语句的更多信息。