Действие, использующее веб-выполнение с бросанием firebase, должно быть установлено MalformedResponse 'final_response' - PullRequest
0 голосов
/ 16 мая 2018

Env: Использование Firebase Cloud развернуто действие Google. Действие использует webhook для получения результатов от функций. Я использую план Blaze, поэтому вызов внешнего URL должен быть законным. Я использую диалоговое окно V2.

Часть моей функции заключается в следующем: Я делаю внешний запрос API, используя следующее (подробности маскированного кода):

var requestObj = require('request');
var options = {
  url: 'my url',
  headers: {
    'User-Agent': 'request'
  }
};

function callback(error, response, body) {
  if (!error && response.statusCode == 200) {
    var info = JSON.parse(body);
    result = JSON.parse(body).element;
    console.log('Title 0  ' + result);
  }
}

requestObj(options, callback);

Получив результат, я его анализирую и использую.

Ниже приведены мои контрольные точки, которые я попробовал из решений по переполнению стека:

Буду признателен за любую помощь сообщества.

1 Ответ

0 голосов
/ 16 мая 2018

В большинстве случаев, связанных с MalformedResponse и асинхронным вызовом, использующим что-то вроде request, проблема заключается в том, что вы отправляете ответ за пределы обратного вызова. Часто это происходит из-за того, что библиотека ожидает обещание, а вы обращаетесь с вещами без обещаний.

Моя обычная практика:

Так (очень приблизительно)

var request = require('request-promise-native');

var options = {
  uri: 'https://example.com/api',
  json: true // Automatically parses the JSON string in the response
};

return request(options)
  .then( response => {
    // The response will be a JSON object already. Do whatever with it.
    var value = response.whatever.you.want;
    return conv.ask( `The value is ${value}. What now?` );
  });
...