Я новичок в облачных функциях firebase и хочу обновить поле username
некоторых документов из коллекции posts
, когда коллекция users
изменяет его username
поле определенного документа. Для этого я использую следующий код:
exports.updateProfileUsername = functions.firestore
.document('users/{userId}')
.onUpdate((change, context) =>
{
const {userId} = context.params;
var newUsername = change.after.data().username;
var previousUsername = change.before.data().username;
if (newUsername.localeCompare(previousUsername) !== 0)
{
let postCollectionRef = db.collection('posts');
let postQuery = postCollectionRef.where('userId', '==', `${userId}`);
return new Promise((resolve, reject) =>
{
updateUsernameDocuments(postQuery, reject, newUsername);
});
}
});
function updateUsernameDocuments(query, reject, newValue)
{
query.get()
.then((snapshot) =>
{
if (snapshot.size === 0)
{
return 0;
}
return snapshot.docs.forEach((doc) =>
{
doc.ref.update({username : `${newValue}`});
});
}).catch(reject);
}
Этот код отлично работает. имена пользователей в коллекции posts
меняются правильно. Но через некоторое время журнал облачных функций показывает этот журнал: Function execution took 60002 ms, finished with status: 'timeout'
. Как это решить? И будет ли эта функция проблемой, если мне придется обновить миллионы документов в posts
коллекции?