2016-04-11 78 views
0

'a dönüşüyor NodeJS'de AWS Lambda işlevleri ile Alexa becerisi geliştiriyorum.NodeJS'de geri arama işlevi, Object

"errorMessage": "Exception: TypeError: object is not a function"

Birincisi benim app bir olay olur: Bir Niyet çağırdığınızda

uygulama hatası atıyor. bir Niyet varsa, o çağırır:

exports.handler = function (event, context) { 

    try { 
      ... 
      else if (event.request.type === "IntentRequest") { 

      onIntent(
       event.request, 
       event.session, 
       function intent_callback(sessionAttributes, speechletResponse) { 
        context.succeed(buildResponse(sessionAttributes, speechletResponse)); 
       } 
      ); 

Yukarıda onIntent() için bir geri arama geçirir görebilirsiniz. Hangi niyet olduğunu kontrol eder. Bir function olarak callback'inde geçirilir burada gösterir Console.logging:

function onIntent(intentRequest, session, callback) { 

    if ("ItemIntent" === intentName) { 
     console.log(callback); // This is a function 

     getOrderResponse(intent, session, callback); 

Ancak getOrderResponse() içinde callback tipi nasılsa bir nesneye dönüşür? Bu yüzden bu hatayı alıyorum, ancak burada function türünün nasıl olduğunu göremiyorum. Neden bir nesne?

function getOrderResponse(callback) { 

    console.log('getOrderResponse', callback); // type = Object: { name: 'ItemIntent', slots: { Item: { name: 'Item' } } } 

    var card_title = config.data().CARD_TITLE; 

    var sessionAttributes = {}, 
     speechOutput = 'So you want quick order', 
     shouldEndSession = false, 
     repromptText = 'Hello'; 

    sessionAttributes = { 
     'speechOutput': repromptText, 
     'repromptText': repromptText, 
     'questions': 'some questions' 
    }; 

    callback(sessionAttributes, buildSpeechletResponse(card_title, speechOutput, repromptText, shouldEndSession)); 
} 
+2

function getOrderResponse(callback) {

olmalıdır. İlk argüman olarak 'callback '' i geçmelisiniz ya da' getOrderResponse' 3 parametreyi kabul etmelidir. –

cevap

2

Geri arama, üçüncü parametre olmalıdır.

getOrderResponse(intent, session, callback); Göndermekte olduğunuz ilk parametre intent nesnesidir. Sen getOrderResponse` `ilk argüman olarak` intent` geçiyoruz

function getOrderResponse(intent, session, callback) {