Firebase Pubsub функция вызывается, но не пишет в firestore - PullRequest
0 голосов
/ 06 мая 2019

У меня есть простая функция облачного паба

var serviceAccount = require("./serviceAccountKey.json");
admin.initializeApp({
  credential: admin.credential.cert(serviceAccount)
});


exports.updateNews = functions.pubsub
  .topic("firebase-schedule-cronForNews-us-central1")
  .onPublish(message => {
    axios
      .get(
        "https://newsapi.org/v2/top-headlines?apiKey=241414&sources=espn-cric-info"
      )
      .then(result => {
        return result.data.articles.forEach(article => {
          db.collection("news").add(article);
        });
      })
      .then(result => {
        console.log(result);
        return result;
      })
      .catch(error => {
        console.log(error);
        return error;
      });

    return null;
  });

Функция вызывается, но она не пишет в firestore, и тот же код работает, когда я конвертирую это в функцию http.

1 Ответ

1 голос
/ 06 мая 2019

Вы можете попробовать вернуть цепочку обещаний и использовать пакетную запись следующим образом:

exports.updateNews = functions.pubsub
  .topic("firebase-schedule-cronForNews-us-central1")
  .onPublish(message => {
    return axios  // Note the return here
      .get(
        "https://newsapi.org/v2/top-headlines?apiKey=241414&sources=espn-cric-info"
      )
      .then(result => {
        const batch = admin.firestore().batch();
        result.data.articles.forEach(article => {
           const docRef = admin.firestore().collection("news").doc();
           batch.set(docRef, article);
        });
        return batch.commit();
      })
      .then(result => {  // You don't need this then if you don't need the console.log
        console.log(result);  
        return null;
      });
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...