在NodeJS中传递回调函数变为对象

时间:2016-04-11 22:40:33

标签: javascript node.js amazon-web-services callback alexa

我正在使用NodeJS中的AWS Lambda函数制作Alexa技能。

当我调用Intent时,应用程序会抛出错误:

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

首先,我的应用程序获得了一个事件。如果它是一个Intent,它会调用:

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

您可以看到上面的回调传递给onIntent()。它检查它是哪个Intent。此处的Console.logging将传递的回调显示为function

function onIntent(intentRequest, session, callback) {

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

        getOrderResponse(intent, session, callback);

然而,callbackgetOrderResponse()的类型会以某种方式变成一个对象?这就是我收到错误的原因,但我不知道这里的function类型是怎样的。为什么它是一个对象?

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

1 个答案:

答案 0 :(得分:2)

回调必须是第三个参数。

getOrderResponse(intent, session, callback);您要发送的第一个参数是intent对象。

function getOrderResponse(callback) {

应该是

function getOrderResponse(intent, session, callback) {