Я пытаюсь развернуть облачную функцию Firebase, которая отправляет текстовое сообщение соответствующему получателю за x количеством текстовых сообщений.Функция запускается в моем приложении для iOS, когда выполняется обновление ссылки на базу данных реального времени «отправить», указывающее, что пользователь нажал кнопку «отправить».
Моя структура Firebase имеет значение
{
"user1uid": {
"send": false
"messagesToSend": {
"messageuid1": {
"messageText": "What's for dinner?",
"recipientNumber": "+18017378888",
}
"messageuid2:
"messageText": "Who won the Cowboys game?",
"recipientNumber": "+18017377787",
}
}
"user2uid": {
"send": false
"messagesToSend": {
"messageuid1": {
"messageText": "What's for dinner?",
"recipientNumber": "+18017378888",
}
"messageuid2:
"messageText": "Who won the Cowboys game?",
"recipientNumber": "+18017377787",
}
}
}
Мой код в настоящее время отправляет только одно сообщение, и я не уверен, как правильно выполнить итерацию через узел messagesToSend для каждого пользователя и отправить все сообщения в нем.
Iпытался следовать учебнику , расположенному здесь .Я рассмотрел следующие ответы переполнения стека, но не могу расшифровать или получить из них решение:
Обещание Firebase для облачной функции
Правильно ли я использую ForEach?
Мой код index.js, который отправляет одно сообщение, выглядит следующим образом:
const functions = require('firebase-functions');
// The Firebase Admin SDK to access the Firebase Realtime Database.
const admin = require('firebase-admin');
admin.initializeApp();
const twilio = require('twilio')
const accountSid = functions.config().twilio.sid;
const authToken = functions.config().twilio.token;
const client = new twilio(accountSid, authToken);
const twilioNumber = functions.config().twilio.number;
// Start cloud function
exports.sendSecrets = functions.database
.ref('/{uid}/send')
.onUpdate((change,context) => {
const uid = context.params.uid;
return admin.database().ref(uid+'/messagesToSend').once('value').then(snapshot => {
snapshot.forEach(function(childSnapshot) {
var key = childSnapshot.key;
var messageData = childSnapshot.val();
**if (messageData.sanitized) return true;**
var message = messageData.messageText;
var phoneNumber = messageData.recipientNumber;
const textMessage = {
body: `From My App - ${message}`,
from: twilioNumber, // From Twilio number
to: phoneNumber // Text to this number
}
return client.messages.create(textMessage)
})
**return snapshot.ref.toString();**
});
});
Обратите внимание, что строки, отмеченные ** на обоих концах, указывают, что я знаю, что мне нужно вернутьсячто-то, основанное на полученных мной сообщениях об ошибках, указывающих, что «Each then () должен возвращать значение или throw».