Получение бесконечного цикла в облачной функции Firebase - PullRequest
0 голосов
/ 27 ноября 2018

Я использую firestore для хранения данных в firebase.Чтобы получить счет я использую функцию облака.Когда я пытаюсь добавить / обновить / удалить запись в одной коллекции, начинается бесконечный цикл с другой коллекцией.Пример: у меня есть таблица пользователя и таблица агента, когда я добавляю / обновляю / удаляю пользователя, он должен обновляться в таблице агента.

Хотя я использовал отдельные функции для пользователей и агента, я все еще получаюinfinite loop.can кто-нибудь подскажет, как ее решить

Запрос на обновление пользователя в таблице user и agent:

 export const addUser = (values) =>
  db
    .collection('users')
    .add(values)
    .then((docRef) => {
      let customer = { customer: {} };
      customer.customer[docRef.id] = {
        id: docRef.id,
        name: values.name,
        commission: values.agent.commission
      };
      let agentId = values.agent.id;
      db.collection('agents')
        .doc(agentId)
        .set(customer, { merge: true });
    });

Облачная функция для пользователя:

const functions = require("firebase-functions");
const admin = require("firebase-admin");

exports = module.exports = functions.firestore
  .document("users/{userUid}")
  .onWrite(
    (change, context) =>
      new Promise((resolve, reject) => {
        let dashboardId;
        getDashboardId();
      })
  );

  getDashboardId = () => {
    admin.firestore().collection('dashboard').get().then((snapshot) => {
      if (snapshot.size < 1) {
        dashboardId = admin.firestore().collection('dashboard').doc().id;
      } else {
        snapshot.docs.forEach((doc) => {
          dashboardId = doc.id;
        });
      }
      return updateUser(dashboardId);
    }).catch((error) => {
      console.log('error is', error);
    });
  }

  updateUser = (id) => {
    admin.firestore().collection('users').where('isDeleted', '==', false).get().then((snap) => {
      let usersData = {users: snap.size};
      return admin.firestore().collection('dashboard').doc(id).set(usersData, {merge: true});
    }).catch((error) => {
      console.log('error is', error);
    });
  }

Облачная функция для агента:

const functions = require("firebase-functions");
const admin = require("firebase-admin");

exports = module.exports = functions.firestore
  .document("agents/{agentUid}")
  .onWrite(
    (change, context) =>
      new Promise((resolve, reject) => {
        let dashboardId;
        getDashboardId();
      })
  );

  getDashboardId = () => {
    admin.firestore().collection('dashboard').get().then((snapshot) => {
      if (snapshot.size < 1) {
        dashboardId = admin.firestore().collection('dashboard').doc().id;
      } else {
        snapshot.docs.forEach((doc) => {
          dashboardId = doc.id;
        });
      }
      return updateAgent(dashboardId);
    }).catch((error) => {
      console.log('error is', error);
    });
  }

  updateAgent = (id) => {
    admin.firestore().collection('agents').where('isDeleted', '==', false).get().then((snap) => {
      let agentsData = {agents: snap.size};
      return admin.firestore().collection('dashboard').doc(id).set(agentsData, {merge: true});
    }).catch((error) => {
      console.log('error is', error);
    });
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...