Обратный звонок в Alexa Skill - PullRequest
0 голосов
/ 06 ноября 2018

У меня проблема с моим навыком Alexa. Код такой:

 var options = { method: 'GET',
      url: 'http://98f8cd20.ngrok.io/products',
      headers: 
       { 'Postman-Token': 'f4e1b171-aae5-46d5-baeb-7903978cf10c',
         'cache-control': 'no-cache',
         'Content-Type': 'application/json' } };


    const callExternalApi = (callback) => {
     request(options, (error, response, body) => {
      if (error) {
          return callback(error)
      }
            const data = JSON.parse(body);
            return callback(data)

    })
    } module.exports.callApi = callExternalApi

и

apicaller.callApi(function(antwort){
     var test = antwort;

    console.log(test)
})

Когда я тестирую его в моем превосходном редакторе, проблем нет вообще, но когда я тестирую его с помощью моего Алекса Скилла, я получаю ошибку. Код там выглядит так:

 'AllCarsIntent': function () {

        apicaller.callApi(function(antwort){
         var test = antwort.count;

          this.response.speak(test).listen("Tell me what you think is the world's most popular sport.")
          this.emit(':responseReady')


         //.listen("Tell me what you think is the world's most popular sport.")
         //this.emit(':responseReady')
     });

Я думаю, что есть проблема с "этим" в моем обратном вызове. Вот как выглядит моя ошибка:

START RequestId: 4064b501-e1b2-11e8-b227-bb50cdd263c7 Версия: $ LATEST 2018-11-06T10: 53: 53.718Z 4064b501-e1b2-11e8-b227-bb50cdd263c7 Предупреждение: Идентификатор приложения не установлен 2018-11-06T10: 53: 54.118Z 4064b501-e1b2-11e8-b227-bb50cdd263c7 Тип Ошибка: Невозможно прочитать свойство 'response' из undefined на /var/task/index.js:29:12 в Request.request [как _callback] (/var/task/data.js:19:12) на Request.self.callback (/var/task/node_modules/request/request.js:185:22) на emitTwo (events.js: 126: 13) в Request.emit (events.js: 214: 7) по запросу. (/Var/task/node_modules/request/request.js:1161:10) в emitOne (events.js: 116: 13) в Request.emit (events.js: 211: 7) на входящем сообщении. (/Var/task/node_modules/request/request.js:1083:12) at Object.onceWrapper (events.js: 313: 30) END RequestId: 4064b501-e1b2-11e8-b227-bb50cdd263c7 ОТЧЕТ RequestId: 4064b501-e1b2-11e8-b227-bb50cdd263c7 Продолжительность: 440,67 мс Продолжительность: 500 мс. Размер памяти: 128 МБ. Макс. Используемая память: 44 МБ
RequestId: 4064b501-e1b2-11e8-b227-bb50cdd263c7 Процесс завершен до завершение запроса

Кто-нибудь имеет представление о моей ошибке? Буду очень признателен за вашу помощь! Заранее спасибо!

1 Ответ

0 голосов
/ 14 ноября 2018

Контекст теряется один раз внутри функции вызова API. this больше не относится к внешнему контексту. Определите переменную test вне функции callApi , затем присвойте значение внутри функции calllApi , а затем выполните речь и испускает также вне функции callApi . Вам нужно будет дождаться возвращения данных вызова API, поэтому вам нужно использовать async / await и узел v8 + Вот пример такого вызова API, но с использованием последней версии ASK SDK (перейдите на эту версию, та, которую вы используете, устарела).

...