Ошибка запроса нескольких документов в облачной функции al oop Firebase - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть следующая структура в firestore.

• разговоры - {convid}

  • сообщения - {messageId}

  • массив полей в автономном режиме [идентификаторы пользователей]

• пользователи - {userid} - устройства - {deviceids}

Таким образом, случай использования всегда новое сообщение отправляется пользователем, запускаемая облачная функция проверяет автономный массив, содержащий идентификаторы пользователей всех автономных пользователей в группе.

Теперь при повторении и последующей отправке pu sh автономным пользователям Итерация показывает только несколько запросов к пользователю по последнему индексу массива в for l oop.

Функция журналов в облаке:

Массив автономных пользователей: => [ '919XXXXX5565', '919XXXXX9334', '9190XXXXX608', '919XXXXX1818', '919XXXXX9974', '9197XXXXX661', '9181XXXXX854']

2: 56: 22,043 AM Текущий идентификатор пользователя: 919XXXXX5565

2: 56: 22.044 AM Текущий идентификатор пользователя: 919XXXXX334

2: 56: 22.044 AM Curr идентификатор пользователя ent: 9190XXXXX608

2: 56: 22.044 AM идентификатор текущего пользователя: 919XXXXX1818

2: 56: 22.044 AM идентификатор текущего пользователя: 919XXXXX9974

2: 56: 22.044 AM Текущий пользователь: 9197XXXXX661

2: 56: 22.044 AM Текущий пользователь: 9181XXXXX854

2: 56: 22.046 AM Успешно подготовленный список токенов false

2: 56: 22.151 AM Выполнение функции заняло 5097 мс, завершено со статусом: 'ok'

2: 56: 22.188 AM Нет соответствующих документов. for => 9181XXXXX854

2: 56: 22.190 AM Нет соответствующих документов. for => 9181XXXXX854

2: 56: 22.229 AM Нет соответствующих документов. for => 9181XXXXX854

2: 56: 22.231 AM Нет соответствующих документов. for => 9181XXXXX854

2: 56: 22.233 AM Нет соответствующих документов. for => 9181XXXXX854

2: 56: 22.237 AM Нет соответствующих документов. для => 9181XXXXX854

Мой код

var outputList = [];
var promises = [];   
return admin.firestore().collection('conversations').doc(conversationDocId).get();
    .then(document =>{
              let offline = []
              if(!document.exists){
                  return false;
              } else{
                  try{
                    offline = document.data().offline;
                    console.log("The array of offline users is =>", offline);
                  }catch(offlineError){
                    console.error("offline array does not exist" + offlineError);
                  }

                  for(uid of offline) {
                    console.log("Current user id: " + uid);
                    let promise = admin.firestore().collection("users").doc(uid).collection('devices').get()
                        .then(snapshot => {
                            if (snapshot.empty) {
                                console.log('No matching documents. for =>', uid);
                            }
                            snapshot.forEach(doc => {
                                try {
                                    token = doc.data().rt
                                    outputList.push(token);
                                } catch (tokenfetcherror) {
                                    console.error("unable to fetch token for =>", uid);
                                }
                            });
                            return;
                        }).catch(errtoken => {
                            console.error('Error getting documents', errtoken);
                        });
                    promises.push(promise);
                }

                Promise.all(promises).then(() => {
                    return outputList;
                }).catch(err => {
                    return err;
                })
              }
              return false;
          })

Я выбрал это из { ссылка }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...