如何使用 Firebase admin sdk 更新 Firestore 中的用户列表?
How to update a list of users in Firestore using Firebase admin sdk?
所以我正在学习如何使用 firebase admin sdk,我遇到了一个我不太了解的问题,无法解决。基本上,我已经查询了我的数据库并获得了我想使用相同值更新的用户子集。所以我将要更新的每个用户的 ID 存储在一个数组中,现在我试图遍历该数组并更新每个用户。但是我在实现这部分时遇到了问题,这与 .update() return 是一个承诺有关,我不是 100% 如何在循环中处理这个问题...
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp()
exports.getAllUsers = functions.https.onRequest((request, response) => {
const db = admin.firestore()
const users = db.collection('users').where('role', '==', 'artist').get()
.then(function (querySnapshot) {
//const users = querySnapshot.data()
const promises = []
querySnapshot.forEach(function (doc){
promises.push(doc)
})
return Promise.all(promises) //returning promises sends the resolved results to
}) //to the next .then()
.then(function (person){
let results = []
person.forEach(function(personSnap){
//const data = personSnap.data()
results.push(personSnap.id)
})
return results // results is the array of ids to update
})
//This .then() is where I have trouble understanding how to update
.then(function (ids){
for(var i = 0; i<ids.length; i++){
var artistsRef = db.collection('users').doc(ids[i]);
artistsRef.update({ //Should not be a return statement. This fixed my problem. Otherwise it would update the first user in the array and then leave the for loop.
'free_credits': '2'
})
}
return 'finished'
})
.then(function(reply) {
return response.send(reply)
})
.catch(function (error){
response.send(error)
})
})
我觉得我应该 returning 'artistsRef.update()' 因为这是一个承诺,但我认为这会导致意想不到的结果。
如果我不 return update() 那么 ESLint 会抛出错误:"Each then() should return a value or throw"
在发送响应之前,您将提前结束最后的 then()
回调。也许你应该添加另一个 then()
只是为了在任何最终更新完成后发送结果。
所以我正在学习如何使用 firebase admin sdk,我遇到了一个我不太了解的问题,无法解决。基本上,我已经查询了我的数据库并获得了我想使用相同值更新的用户子集。所以我将要更新的每个用户的 ID 存储在一个数组中,现在我试图遍历该数组并更新每个用户。但是我在实现这部分时遇到了问题,这与 .update() return 是一个承诺有关,我不是 100% 如何在循环中处理这个问题...
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp()
exports.getAllUsers = functions.https.onRequest((request, response) => {
const db = admin.firestore()
const users = db.collection('users').where('role', '==', 'artist').get()
.then(function (querySnapshot) {
//const users = querySnapshot.data()
const promises = []
querySnapshot.forEach(function (doc){
promises.push(doc)
})
return Promise.all(promises) //returning promises sends the resolved results to
}) //to the next .then()
.then(function (person){
let results = []
person.forEach(function(personSnap){
//const data = personSnap.data()
results.push(personSnap.id)
})
return results // results is the array of ids to update
})
//This .then() is where I have trouble understanding how to update
.then(function (ids){
for(var i = 0; i<ids.length; i++){
var artistsRef = db.collection('users').doc(ids[i]);
artistsRef.update({ //Should not be a return statement. This fixed my problem. Otherwise it would update the first user in the array and then leave the for loop.
'free_credits': '2'
})
}
return 'finished'
})
.then(function(reply) {
return response.send(reply)
})
.catch(function (error){
response.send(error)
})
})
我觉得我应该 returning 'artistsRef.update()' 因为这是一个承诺,但我认为这会导致意想不到的结果。
如果我不 return update() 那么 ESLint 会抛出错误:"Each then() should return a value or throw"
在发送响应之前,您将提前结束最后的 then()
回调。也许你应该添加另一个 then()
只是为了在任何最终更新完成后发送结果。