Пользователь вводит сообщение в чат-клиент (веб-сайт).Это сообщение отправляется в облачную функцию, настроенную на базе Firebase.Облачная функция затем запрашивает сторонний API, который возвращает ответ.Этот ответ необходимо отправить обратно клиенту для отображения.
Так что в основном мой клиент вызывает облачную функцию примерно так ...
var submitMessage = firebase.functions().httpsCallable('submitMessage');
submitMessage({message: userMessage}).thenfunction(result) {
//Process result
});
Моя облачная функция выглядит следующим образом ...
exports.submitMessage = functions.https.onCall((data, context) => {
request({
url: URL,
method: "POST",
json: true,
body: queryJSON //A json variable I've built previously
}, function (error, response, body) {
//Processes the result (which is in the body of the return)
});
return {response: "Test return"};
});
Я включил пакет запроса, и сам вызов API работает отлично.Я могу вывести результат на консоль из функции возврата запроса.Однако, очевидно, поскольку запрос асинхронный, я не могу просто создать глобальную переменную и присвоить ей тело результата.Я видел, что вы можете вызвать функцию обратного вызова после завершения запроса.Однако мне нужно каким-то образом передать это через возвращаемое значение функции облака.Проще говоря, мне нужно сделать это ...
exports.submitMessage = functions.https.onCall((data, context) => {
var gBody;
request({
url: URL,
method: "POST",
json: true,
body: queryJSON //A json variable I've built previously
}, function (error, response, body) {
gBody = body;
});
return gBody;
});
(Да, я знаю об этом сообщении ... Как мне вернуть ответ от асинхронного вызова? но да, как я уже сказал, мне нужно, чтобы переменная область видимости находилась внутри самой облачной функции, чтобы я мог вернуть значение клиенту. Либо я не понимаю методы, использованные в этом посте, либо он не выполняет то, что япрошу)