Облачные функции Firebase - Как ждать функцию во время экспорта? - PullRequest
0 голосов
/ 28 апреля 2019

Использование облачных функций Firebase Я пытаюсь расширить URI, который находится в документе FireStore, и заменить его расширенным URI.

Я использую пакет с высоким npm (https://www.npmjs.com/package/tall), который работает хорошо, я просто не могу получить полученный расширенный uri в мой объект, чтобы вернуть его в firestore.

Я считаю, что он не возвращается до завершения остальной части моей функции и поэтому не дает мне данных. Когда я пытался использовать пример на странице для асинхронного и использовать await, firebase выдает ошибку.

Я предполагаю, что упускаю что-то очень простое, но после тяжелого дня загрузки в облачные функции, тестирования и повторных попыток я не в восторге.

Чего мне не хватает?

exports.addonSanitized = functions.firestore
  .document('addons/{addonId}')
  .onCreate(doc => {
    const addonId = doc.id;
    const addon = doc.data();

    const expandedLink = tall(addon.link)
      .then(unshortenedUrl => console.log('Tall url', unshortenedUrl))
      .catch(err => console.error('AAAW ?', err));

    const sanitized = {
      summary: `${expandedLink}`
    };

    return admin
      .firestore()
      .collection('addons')
      .doc(addonId)
      .update(sanitized)
      .then(doc => console.log('Entry Sanitized', doc));
  });

Я ожидаю, что extendedLink вернет расширенную ссылку. В документ вводится [Обещание объекта]

1 Ответ

0 голосов
/ 28 апреля 2019

Вы получаете "[обещание объекта]", потому что значение expandedLink равно Promise.

Значение, которое вы на самом деле хотите, составляет unshortenedUrl.Вы можете получить доступ только к этому значению внутри then() там, где оно существует, поэтому вам нужно вместо этого вернуть tall Promise и иметь другой оператор возврата внутри then().

Потенциально что-то вроде этого (непроверенный):

exports.addonSanitized = functions.firestore
  .document('addons/{addonId}')
  .onCreate(doc => {
    const addonId = doc.id;
    const addon = doc.data();

    return tall(addon.link)
      .then(unshortenedUrl => {
        console.log('Tall url', unshortenedUrl)
        const sanitized = {
          summary: `${unshortenedUrl}`
        };
        return admin
          .firestore()
          .collection('addons')
          .doc(addonId)
          .update(sanitized)
          .then(doc => console.log('Entry Sanitized', doc));
      })
      .catch(err => console.error('AAAW ?', err));

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