В настоящее время я создаю игру Google Action. Я хочу дать пользователям дополнительные баллы, когда они имеют более высокую скорость входа в систему. Поэтому, если пользователь входит в систему 2 раза и дает правильный ответ, он должен получить 2 балла вместо 1. 3 входа = 3 балла и т. Д.
Для этого у меня есть еженедельный счет (количество правильных ответов за неделю) и счет входа в систему. Когда я тестирую свое приложение, оно выдает противоречивые результаты. Таким образом, вместо того, чтобы давать мне 2 балла при моем втором входе в систему, он дает мне только 1. Во время другого теста баллы не даются вообще, и мои общие баллы остаются такими же, как и раньше.
Когда я регистрирую 'loginstreakcount', значение отличается от значения в базе данных. Фактически, большую часть времени он показывает на 1 логин меньше.
Я искал в сети эту проблему и обнаружил, что это может быть связано с ограничением Firestore 1 QPS на документ. Однако я не знаю, является ли это реальной проблемой.
const userRef = db.collection('users').doc(payload.email)
userRef.update({loginstreak: admin.firestore.FieldValue.increment(1)})
const getuser = userRef.get()
return getuser
.then(doc => {
if (!doc.exists) {
console.log('No such document!');
} else {
if (doc.data().loginstreak === 2) {
userRef.update({weeklysuccescount: admin.firestore.FieldValue.increment(1)})
conv.add('Hooray')
console.log("If statement 2")
conv.close('bye')
}
else if (doc.data().loginstreak === 3) {
userRef.update({weeklysuccescount: admin.firestore.FieldValue.increment(2)})
conv.add('Hooray')
console.log("If statement 3")
conv.close('bye')
}
else if (doc.data().loginstreak === 4) {
userRef.update({weeklysuccescount: admin.firestore.FieldValue.increment(3)})
conv.add('Hooray')
console.log("If statement 4")
conv.close('bye')
}
else if (doc.data().loginstreak === 5) {
userRef.update({weeklysuccescount: admin.firestore.FieldValue.increment(4)})
conv.add('Hooray')
console.log("If statement 5")
conv.close('bye')
}
else if (doc.data().loginstreak === 6) {
userRef.update({weeklysuccescount: admin.firestore.FieldValue.increment(5)})
conv.add('Hooray')
console.log("If statement 6")
conv.close('bye')
}
else if (doc.data().loginstreak === 7) {
userRef.update({weeklysuccescount: admin.firestore.FieldValue.increment(6)})
conv.add('Hooray')
console.log("If statement 7")
conv.close('bye')
}
else {
userRef.update({weeklysuccescount: admin.firestore.FieldValue.increment(1)})
console.log('Loginstreak: ' + doc.data().loginstreak)
conv.add('Hooray')
conv.close('bye')
}
}})
ОБНОВЛЕНИЕ:
Я пытался реализовать ответ, но в БД счетчик оценок действителен, однако в действии он говорит неверную оценку. Таким образом, обещание, похоже, еще не сработало. Вот мой обновленный код:
const userRef = db.collection('users').doc(payload.email)
return userRef.update({loginstreak: admin.firestore.FieldValue.increment(1)})
.then(() => {
const getuser = userRef.get()
return getuser
.then(doc => {
if (!doc.exists) {
console.log('No such document!');
} else {
if (doc.data().loginstreak === 2) {
return userRef.update({wekelijkssuccescount: admin.firestore.FieldValue.increment(1)})
.then(() => {
conv.add('Hooray')
console.log("If statement 2")
conv.close('bye')
})
}
else if (doc.data().loginstreak === 3) {
return userRef.update({wekelijkssuccescount: admin.firestore.FieldValue.increment(2)})
.then(() => {
conv.add('Hooray')
console.log("If statement 3")
conv.close('bye')
})
}
else if (doc.data().loginstreak === 4) {
return userRef.update({wekelijkssuccescount: admin.firestore.FieldValue.increment(3)})
.then(() => {
conv.add('Hooray')
console.log("If statement 4")
conv.close('bye')
})
}
else if (doc.data().loginstreak === 5) {
return userRef.update({wekelijkssuccescount: admin.firestore.FieldValue.increment(4)})
.then(() => {
conv.add('Hooray')
console.log("If statement 5")
conv.close('bye')
})
}
else if (doc.data().loginstreak === 6) {
return userRef.update({wekelijkssuccescount: admin.firestore.FieldValue.increment(5)})
.then(() => {
conv.add('Hooray')
console.log("If statement 6")
conv.close('bye')
})
}
else if (doc.data().loginstreak === 7) {
return userRef.update({wekelijkssuccescount: admin.firestore.FieldValue.increment(6)})
.then(() => {
conv.add('Hooray')
console.log("If statement 7")
conv.close('bye')
})
}
else {
return userRef.update({wekelijkssuccescount: admin.firestore.FieldValue.increment(1)})
.then(() => {
console.log('Loginstreak: ' + doc.data().loginstreak)
conv.add('Hooray')
conv.close('bye')
})
}
}}) })