Использовать модуль запроса HTTP GET Firebase Функция Node.js - PullRequest
0 голосов
/ 12 ноября 2018

Я использую тарифный план (!) Для функций Firebase Cloud для веб-крючка для действий Google. Я пытаюсь реализовать HTTP GET с запросом модуля. Я установил модуль с запросом установки npm и правильно развернул. Я хочу использовать Google Maps расстояние-матрица API.

По некоторым причинам я не могу использовать модуль запроса вообще. В журнале я не вижу ни «ОШИБКИ в GET», ни «быть УСПЕШНЫМ». Есть идеи, в чем проблема?

// Handle the Dialogflow intent named 'Default Welcome Intent'.
app.intent('Default Welcome Intent', (conv) => {

  var url = "https://maps.googleapis.com/maps/api/distancematrix/json?units=imperial&origins=Washington,DC&destinations=New+York+City,NY&key=AIzaSyBich-7OBAxvtAwX5XnHQyJ7xZiJ8libVQ";

  request({url: url, json: true}, (err, resp, body) => {
    if (err) {
      console.log('ERROR in GET');
      conv.ask('ERROR in GET');
    }
    else { 
      conv.ask('beeing SUCCESSFULL');
      console.log('beeing SUCCESSFULL');
    }
  })

Спасибо заранее и наилучшими пожеланиями. OliDev

Ответы [ 2 ]

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

Я думаю, что нашел решение. По-видимому, по какой-то причине кажется невозможным использовать conv.ask () в обещании. Необходимо передать аргумент. Следующий код работает:

const p = new Promise(function(resolve,reject){
          request({url: 'YOUR_URL', 
                   json: true}, (err, resp, body) => {
               if (err) {
                  // do not use conv.ask() here
                  resolve('no ok');
               } else { 
                  // do not use conv.ask() here
                  resolve('ok');
               }

          }) 
})

app.intent('Default Welcome Intent', (conv) => {

    p.then(resp => conv.ask('resp'));
    conv.ask('foobar');

})
0 голосов
/ 12 ноября 2018

Здесь, когда вы выполняете асинхронную работу внутри функции-обработчика, вы должны вернуть Promise, который выполняет эту работу, потому что в противном случае был бы пустой ответ и ошибка. так что

app.intent('Default Welcome Intent', (conv) => {
     return Promise(function(resolve,reject){
          request({url: url, json: true}, (err, resp, body) => {
               if (err) {
                  console.log('ERROR in GET');
                  conv.ask('ERROR in GET');
               }else { 
                  conv.ask('beeing SUCCESSFULL');
                  console.log('beeing SUCCESSFULL');
               }
               resolve()
          })   
     })
})

Надеюсь, это работает для вас.

...