Вызов функции обещания в облачной функции Google - PullRequest
1 голос
/ 12 марта 2019

Я пытаюсь отправить HTTP-запрос в другую веб-службу из созданной мной облачной функции Google (GCF). Мне нужен HTTP-запрос для завершения и возврата этого результата внутри моего GCF, чтобы я мог сделать с ним что-то еще.

Мой вопрос; Как лучше всего использовать Promise в облачной функции Google? Возможно ли то, что я пытаюсь сделать?

Мой код в настоящее время выглядит следующим образом:

export const MyGCF = functions.https.onRequest((request, response) => {

  let dayOfTheWeek: any;

  const request1 = require('request');
  const url = 'http://worldclockapi.com/api/json/pst/now';
  function getDay() {
    return new Promise((resolve, reject) => {
        request1(url, { json: true }, (err: any, res: any, body: any) => {
            if (err) {
                return reject(err);
            }
            resolve(body.dayOfTheWeek);
        });
    });
  }

  getDay().then((data) => {
      dayOfTheWeek = data;
      console.log(dayOfTheWeek);
  });

});

1 Ответ

2 голосов
/ 12 марта 2019

В целом ваш подход будет работать, и вы можете определять дополнительные функции внутри вашего MyGCF обработчика, так же, как вы определили getDay(). Однако одна проблема с текущим кодом заключается в том, что вы забыли «написать ответ» на запрос, обрабатываемый MyGCF.

Вы можете написать ответ на запрос, вызвав send() на втором res аргументе вашего MyGCF обработчика запроса. Простой пример будет:

/* Sends a response of "hello" for the request */
res.send("hello");

Что касается вашего кода, вы можете использовать res.send() в вашем .then() обратном вызове, чтобы отправить ответ клиенту после завершения getDay() (см. Код ниже). Также обратите внимание на включение в .catch() предложения и обратного вызова для случая ошибки (с состоянием ошибки), чтобы гарантировать, что клиент получит соответствующий ответ об ошибке, если вызов getDay() завершится неудачно:

export const MyGCF = functions.https.onRequest((req, res) => {

  const request = require('request');
  const url = 'http://worldclockapi.com/api/json/pst/now';

  function getDay() {
    return new Promise((resolve, reject) => {
      request(url, {
        json: true
      }, (err: any, r: any, body: any) => {
        if (err) {
          reject(err);
        } else {
          resolve(body.dayOfTheWeek);
        }
      });
    });
  }

  getDay().then((dayOfTheWeek) => {
      /* Send a response once the getDay() request complete */
      res.send(dayOfTheWeek);
    })
    .catch(err => {
      /* Don't forget the error case */
      res.status(500).send(err);
    });

});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...