Аз съм нов в облачните функции на 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
?