Javascript 回调不是函数NodeJS
我对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' },
{
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第三个参数是一个表达式,在方法调用中回调函数的右边。您可以了解有关函数表达式和函数语句的更多信息。