Приложение Alexa работает локально, рано возвращаясь на Lambda

Таким образом, у меня есть несколько вызовов, прикованных к работе, и отправка обновления в электронную таблицу Google, когда я работаю локально, но когда я пытаюсь запустить его на Lambda, он просто возвращается рано без каких-либо ошибок.

skillService.intent("sampleIntent", {
        ...
    },
    function(request,response){
        var name = request.slot("NAME");
        var category = request.slot("CATEGORY");
        var event = request.slot("EVENT");

        // slot used for any parts of conversation
        var stepValue = request.slot('STEPVALUE');

        var sampleHelper = getHelper(request);
        // If it hasn't started, see if the user gave some slots and start from that step
        if(!sampleHelper.started){
            sampleHelper.determineStep(name, category, event);
        }
        sampleHelper.started = true;
        // Did they provide all the necessary info?
        if(sampleHelper.completed()){
            // Handles reading out the menu, etc
            return sampleHelper.updateSheet(response);
        }
);

и вот что выглядит updateSheet

SampleHelper.prototype.updateSheet = function(resp){
    var name = this.observance[0].steps[0].value;
    var category = this.observance[0].steps[1].value;
    var event = this.observance[0].steps[2].value;
    console.log("about to auth.");
    return authorize(JSON.stringify(this.access_token))
        .then(function(auth){
            console.log("passed auth");
            return getColumns(auth, name, category).then(function(){
                console.log("get columns");
                return updateSheet(auth,name,category,event).then(function(){
                    console.log("finished updating");
                    return resp.say("Successfully logged for " + name + " a " + category + " of " + event).send();
                });
            }).catch(function(err){
                console.log("failed columns");
                return resp.say(err).send();
            });
        })
        .catch(function (err) {
            console.log("Auth err: ", err);
            return resp.say("There was an error authenticating. Please check your Alexa app for how to reconnect your google account.").send();
        });
};

мой локальный терминал:2017-06-28_00-21-53

Вывод AWS, используя тот же JSON для запроса:2017-06-28_00-24-45

Версии моего узла 6.10, и у меня есть alexa-app-server/ мое приложение, использующее alexa-app: "^4.0.0"

местный ответ:

{
  "version": "1.0",
  "response": {
    "directives": [],
    "shouldEndSession": true,
    "outputSpeech": {
      "type": "SSML",
      "ssml": "<speak>Successfully logged</speak>"
    }
  },
  "sessionAttributes": {},
  "dummy": "text"
}

Лямбда пуста

{
  "version": "1.0",
  "response": {
    "directives": [],
    "shouldEndSession": true
  },
  "sessionAttributes": {}
}

1 ответ

Так что с помощью замечательного друга в PSU я понял это.

Я на самом деле возвращал свой код, и когда Lambda видит это возвращение, это убивает функцию. При запуске на локальном компьютере он вернется, но не уничтожит процесс, и, следовательно, остальная часть кода все равно будет работать.

Чтобы решить эту проблему, я завернул все в обещание, а затем вернул его с помощью.then()

// Did they provide all the necessary info?
    if(sampleHelper.completed()){
        // Handles reading out the menu, etc
        return sampleHelper.updateSheet(response).then(function(data){
            return response.say("Successfully logged for " + sampleHelper.getName() + " a " + sampleHelper.getCategory() + " of " + sampleHelper.getEvent()).send();
        }).catch(function(err){
            console.log(err);
            return response.say("error").send();
        });
    } 

и таблица обновлений:

return new Promise(function(resolve, reject) {
        authorize(JSON.stringify(access_token))
            .then(function (auth) {
                console.log("passed auth");
                getColumns(auth, name, category).then(function () {
                    console.log("get columns");
                    updateSheet(auth, name, category, event).then(function () {
                        console.log(new Date().getTime());
                        resolve("worked");
                    });
                }).catch(function (err) {
                    console.log("failed columns");
                    throw "Failed columns";
                    // return resp.say(err).send();
                });
            })
            .catch(function (err) {
                throw err;
                console.log("Auth err: ", err);
                return resp.say("There was an error authenticating. Please check your Alexa app for how to reconnect your google account.").send();
            });
    });
Другие вопросы по тегам