2017-02-27 13 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]の根本的な原因であると思われます。

私はラムダでClaudia.jsを使用しています。

+1

以下のようにこの関数を呼び出す必要が最初http://stackoverflow.com/a/19739852/6048928 http://stackoverflow.com/a/19756960/6048928 – RaR

+2

ます'function(userId、listName、callback)'としてまだ 'setActive'を定義しました。あなたは最初の引数として無名関数を渡しています。 –

+0

そうですね? 'listOps.setActive(userId、listName、callback); if(コールバック){ console.log( 'ここで私はコールバックが必要です!'); リターンコールバック。 }; ' –

答えて

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の3番目の引数です。 – mvermand

+1

@DavedeSade第3引数は、メソッド呼び出しのコールバック関数をインラインで呼び出す[anonymous function](https://en.wikibooks.org/wiki/JavaScript/Anonymous_functions)式です。関数式と関数ステートメントの詳細については、このMDNの記事(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions)を参照してください。 –

0

これはあなたのリスト/テスあなたはあなたがの定義によって期待通りに違法であるだけ機能listOps.setActive(function (userId, listName, callback) {を渡しているbot.jsファイルでこの関数を呼び出しながら、三つの引数userIdlistNamecallbackを受け入れる機能exports.setActive = function(userId, listName, callback)を定義しているファイルt.js setActive関数です。あなたは、コールバックについて読むことをお勧めします

listOps.setActive(userId, listName, function() { 
       //your stuffs here 
}); 
関連する問題