Набор навыков Alexa Node.js - необходимо вернуть данные обратного вызова до завершения обработчика

Я пытаюсь создать простой навык Alexa для возврата данных из API с помощью [Node.js ASK] (https://developer.amazon.com/public/community/post/Tx213D2XQIYH864/Announcing-the-Alexa-Skills-Kit-for-Node-js). Я поместил http get в обработчик, но Alexa завершает обработчик до того, как обратный вызов асинхронно вернет данные API.

Я искал ответы, и сейчас мои мысли следующие:

  1. не использовать node.js
  2. выяснить способ синхронного получения данных
  3. Что-то простое, что мне не хватает

Ядро кода:

exports.handler = function(event, context, callback) {
  var alexa = Alexa.handler(event, context);
  alexa.registerHandlers(handler);
  alexa.execute();
};

var handler = Alexa.CreateStateHandler(states.x, {
  'intent': function() {
    var options = {
      host: baseURL,
      path: pathURL
    };
    
    callback = function(response) {
      var str = "";
      response.on('data', function(piece) {
        str += piece;
      });
      
      response.on('end', function() {
        //does not get executed
        this.emit(':tell', str, "test");
      });
    }
    
    http.request(options, callback).end();
    
    //this does get executed if I leave this here
    this.emit(':tell'...);
  };


person allen    schedule 20.09.2016    source источник


Ответы (1)


Я думаю, у вас проблема с объемом. пытаться ...

response.on('end',() => {
    this.emit(':tell', str, "test");
});
person Cole Peterson    schedule 01.10.2016