2017-02-27 189 views
0

我在NodeJS中很新,但我也在爲函數之間傳遞變量/對象的概念掙扎。我很感謝任何幫助我做錯了什麼。回調不是函數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。

+1

你可能想了解回調第一http://stackoverflow.com/a/19739852/6048928 http://stackoverflow.com/a/19756960/6048928 – RaR

+2

你定義'setActive'爲'function(userId,listName,callback)'但在bot.js中,你只傳遞一個匿名函數作爲第一個參數 –

+0

所以這樣? 'listOps.setActive(userId,listName,callback); if(callback){console.log('Here I expect a callback!'); 返回回調; };' –

回答

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); 
}); 
+0

這看起來很不錯,但是......回調在哪裏呢? –

+0

回調是listOps.setActive的第三個參數。 – mvermand

+1

@DavedeSade第三個參數是一個[匿名函數](https://en.wikibooks.org/wiki/JavaScript/Anonymous_functions)表達式,它在方法調用中內聯回調函數。您可以在[本MDN文章](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions)中瞭解有關函數表達式和函數聲明的更多信息。 –

0

這是因爲在您的listops/tes t.js文件要定義一個函數exports.setActive = function(userId, listName, callback)當你調用這個函數在bot.js文件你逝去的只是一個功能listOps.setActive(function (userId, listName, callback) {的定義,預期這是非法的,它接受三個參數userIdlistNamecallback setActive函數。你需要調用這個函數如下

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