alexa sdk: сохранение атрибутов сессии в ответе https - PullRequest
0 голосов
/ 25 мая 2019

У меня есть навык, и я хочу загрузить некоторые данные из URL и сохранить их в атрибутах SessionAttributes.

поэтому я записал это в свой handle(handlerInput) моего LaunchRequestHandler:

require('https').get(url, (resp) => {

  resp.on('data', (chunk) => {
    data += chunk;
  });

  resp.on('end', () => {
    let attributes = JSON.parse(data);
    console.log(attributes);
    handlerInput.attributesManager.setSessionAttributes(attributes);
  });
});

журнал показывает правильный объект, но когда я пытаюсь загрузить атрибуты sessionAttributes в следующем намерении, он пуст. Я предполагаю, что это как-то связано с тем, что setSessionAttributes находится в функции ответа, потому что, если я устанавливаю что-то непосредственно после этого кода, это работает. Есть идеи?

1 Ответ

0 голосов
/ 27 мая 2019

Это может быть из-за асинхронной операции. Пожалуйста, используйте async / await для вызова API, а затем сохраните. Пример примера,

const getData = () => {
  return new Promise((resolve, reject) => {
    require("https").get(url, resp => {
      resp.on("data", chunk => {
        data += chunk;
      });

      resp.on("end", () => {
        resolve(data);
      });
    });
  });
};

const LaunchRequestHandler = {
  canHandle(handlerInput) {
    return handlerInput.requestEnvelope.request.type === "LaunchRequest";
  },
  async handle(handlerInput) {
    const speechText = "welcome";
    const data = await getData(); //asynchronous operation
    const sessionAttributes = handlerInput.attributesManager.getSessionAttributes();
    sessionAttributes.data = data;
    handlerInput.attributesManager.setSessionAttributes(sessionAttributes);
    return handlerInput.responseBuilder
      .speak(speechText)
      .reprompt(speechText)
      .withSimpleCard("Welcome to the Skill", speechText)
      .getResponse();
  }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...