Код работал нормально на симуляторе, когда внезапно:
-> 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»,