Итак, я новичок в javascript и уверен, что код не идеален. Я сталкиваюсь с некоторыми проблемами при получении данных из Firestore.
Функция personalMessage занимает около 50 секунд, и я понятия не имею, почему она так долго.
Этот код в быстром будет возвращаться из базы данных менее 1000 мс.
Также рекомендуются любые указатели в стиле кода.
function sendMessageToDevice(token, payload, options) {
admin.messaging().sendToDevice(token, payload, options)
.then(response => {
console.log('Successfully sent message:', response, response.results[0].error);
return response
})
.catch(error => console.log('Error sending message:', error));
}
function getUser(userId) {
return admin.firestore().collection('users').doc(userId).get()
.then(snapshot => {
if (!snapshot.exists) {
console.log('No such document!');
return null;
}
return snapshot.data()
})
.catch(err => {
console.log('Error getting document', err);
return err;
});
}
exports.personalMessage = functions.firestore
.document('/messages/{id}')
.onCreate((snapshot, context) => {
var messageData = snapshot.data();
var userId = messageData.user;
var fromId = messageData.from;
Promise.all([getUser(userId), getUser(fromId)])
.then(([dataA, dataB]) => {
console.log(dataA.fcmToken, dataB.name);
var payload = {
notification: {
title: dataB.name + ' messaged you.',
body: 'Go check it out it',
clickAction: 'NEW_PERSONAL_MESSAGE'},
data: {
messageId: context.params.id}
};
var options = {
contentAvailable: false,
priority: 'high'
}
return sendMessageToDevice(dataA.fcmToken, payload, options);
})
.catch(error => console.log('Error sending message:', error));
return Promise.resolve('success');
});