При запросе наблюдаемой в цикле forEach
создается ли новый "экземпляр" наблюдаемой в каждом цикле или перезаписывается ли существующая наблюдаемая, если запрос следующего цикла запрашивается до того, как предыдущая наблюдаемая возвращает значение?
Например, если у меня есть сообщения для отправки моим пользователям, мне нужно запросить все их устройства и отправить на все устройства.Пример темы в массиве тем, которая передается в createTopics(topics)
:
Отдельный элемент в массиве тем
{
"submission": {
"id": 52,
"artistID": 111,
"title": "Sego Sucks",
"Artist": {
"name": "Sego"
}
},
"users": [
{
"id": 7,
"userUID": "ZvOBNBqxbgRYoibSYEwkL9YKtWG2"
}
]
}
Мой вопрос: когдаЯ запускаю цикл forEach
, у меня есть наблюдаемое в findUserDevices
, которое действительно очень быстро повторяется несколько раз, будет ли моя наблюдаемая «перезаписана» следующим циклом, если он не вернет значение до того, как произойдет следующий цикл?До сих пор, когда я запускаю этот код, он выполняется как запланировано, но я не уверен, является ли это наилучшим способом обработки наблюдаемого в качестве моих масштабов данных, и в каждой теме больше пользователей, особенно с учетом того, что pushToDevices()
является асинхронной функцией.
function createTopics(topics) {
topics.forEach((topic: any) => {
const message = {
notification: {
title: `New music from ${topic.submission.Artist.name}!`,
body: `Listen to "${topic.submission.title}" now`
}
}
topic.users.forEach((user) => {
findUserDevices(user.userUID, message);
})
})
}
function findUserDevices(uid: string, message) {
collectionData(fb.firestore().collection('devices').where('userId', '==', uid)).subscribe((devices: any) => {
var userDeviceTokens: string[] = devices.map((device: any) => device.token);
if (userDeviceTokens.length != 0) {
message['tokens'] = userDeviceTokens;
pushToDevices(message);
}
})
}
async function pushToDevices(message) {
await admin.messaging().sendMulticast(message).then((response) => {
console.log('done!')
})
}
Спасибо за понимание!