Масштабная пожарная база запланированного события - PullRequest
0 голосов
/ 07 мая 2019

У меня есть событие pubsub, которое проходит каждые 4 часа.Я хочу сохранить все команды пользователя после запланированного события.Я выполняю пакетную запись, но для пакетной записи существует ограничение в 500 записей на коммит.ниже приведен пример кода, аналогичного тому, что я пытаюсь сделать.

Вопрос: Как автоматически масштабировать пакетную запись.

exports.updateNews = functions.pubsub
  .topic("my-scheduled-topic")
  .onPublish(message => {
    return axios
      .get(
        "https://newsapi.org/v2/top-headlines?apiKey=someKey&sources=espn-cric-info"
      )
      .then(result => {
        const batch = db.batch();
        result.data.articles.forEach(article => {
          const docRef = db.collection("news").doc();
          batch.set(docRef, article);
        });
        return batch.commit();
      })
      .then(result => {
        console.log(result);
        return result;
      })
      .catch(error => {
        console.log(error);
        return error;
      });
  });

Ответы [ 2 ]

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

Если вы столкнулись с лимитом 500 записей для вашей партии, вы можете вместо этого использовать Promise.all(), как указано ниже.Он вернет одно Обещание, которое разрешается, когда все обещания, возвращенные вызовами метода add(), разрешены.

exports.updateNews = functions.pubsub
  .topic("my-scheduled-topic")
  .onPublish(message => {
    return axios
      .get(
        "https://newsapi.org/v2/top-headlines?apiKey=someKey&sources=espn-cric-info"
      )
      .then(result => {
        const promises = [];
        result.data.articles.forEach(article => {
           promises.push(db.collection("news").add(article));
        });
        return Promise.all(promises);
      })
      .then(results => {
        console.log(results);
        return null;
      })
      .catch(error => {
        console.log(error);
        return null;
      });
  });
0 голосов
/ 07 мая 2019

Я думаю, что решил сам

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