Firestore: операция была прервана, как правило, из-за проблемы параллелизма, такой как прерывание транзакции и т. Д. (Firestore / aborted) - PullRequest
0 голосов
/ 10 апреля 2019

Код работал нормально на симуляторе, когда внезапно:

-> Firestore: операция была отклонена, поскольку система не находится в состоянии, необходимом для выполнения операции. (Firestore / неудавшегося предварительное условие).

Затем я установил приложение на физическое устройство (Android) и затем:

-> Firestore: операция была прервана, как правило, из-за проблемы параллелизма, такой как прерывание транзакции и т. Д. (Firestore / aborted)

async setModal() {
    await this.setState({ showCardDetails: false });

    const { userCard, following } = this.props;

    let userKey = await AsyncStorage.getItem('UserKey');
    let user = await AsyncStorage.getItem('UserDetails');
    console.log(userCard.key);
    const currentUserID = firebase
      .firestore()
      .collection('users')
      .doc(userKey);

    const id = firebase
      .firestore()
      .collection('users')
      .doc(userCard.key);

    firebase.firestore().runTransaction(async transaction => {

      //If follows the user
      if (following) {
        //Update the following of the viewing user
        if (userCard.followers) {
          let result = await userCard.followers.find(f => f === userKey);
          if (!result) {
            let foll = userCard.followers;
            foll.push(userKey);
            transaction.update(id, {
              followers: foll
            });
          }
        } else {
          let foll = [];
          foll.push(userKey);
          transaction.update(id, {
            followers: foll
          });
        }

        //Update the following of the loggedIn user
        if (user.following) {
          let result1 = await user.following.find(f => f === userCard.key);
          if (!result1) {
            let folln = user.following;
            folln.push(userCard.key);
            transaction.update(currentUserID, {
              following: folln
            });
          }
        } else {
          let folln = [];
          folln.push(userCard.key);
          transaction.update(currentUserID, {
            following: folln
          });
        }
        //If unfollows the user
      } else if (!following) {
        //Update the following of the viewing user
        if (userCard.followers) {
          let result = await userCard.followers.find(f => f === userKey);
          if (result) {
            let result2 = userCard.followers.filter(f => f !== userKey);
            transaction.update(id, {
              followers: result2
            });
          }
        }

        //Update the following of the loggedIn user
        if (user.following) {
          let result1 = await user.following.find(f => f === userCard.key);
          if (result1) {
            let result2 = user.following.filter(f => f !== userCard.key);
            transaction.update(currentUserID, {
              following: result2
            });
          }
        }
      }
    });
  }

В начале регистрации документ добавляется нормально, но эти транзакции не выполняются должным образом.

«response-native-firebase»: «^ 5.2.3», «реагировать»: «16.8.3», «реактивный-нативный»: «0,59,3»,

...