Если еще не работает внутри снимка Firebase - PullRequest
0 голосов
/ 06 августа 2020

Я написал следующий код, чтобы проверить, находятся ли два пользователя внутри комнаты:

useEffect(() => {
        var chatroom = db.collection('test').where("Users", "array-contains", `${selectedUser}`);

        chatroom.get().then(snapshot => {
            snapshot.forEach(doc => {
                if (doc.data().Users.includes(username) && doc.data().Users.includes(selectedUser)) {
                    console.log("Found match");

                    ...etc...

                    setMessages(objects);
                }
                else {
                    console.log("Didn't find a valid chat");
                    setMessages([]);
                }

                console.log("???");

            })
        });
    }, [username, selectedUser]);

Он работает правильно, если условие if выполнено успешно, однако, если условие ложно, то выиграл else не выполняется, и даже console.log ("???") никогда не запускается. Я не уверен, что могло быть причиной этого.

Изменить: я нашел работу, добавив логическое значение, чтобы указать, было ли найдено совпадение. Код за пределами снимка все еще работает, поэтому я просто переместил туда материал.

Edit2: На самом деле это не работает, так как я забыл, javascript просто запустит код внизу, прежде чем данные будут извлечены.

1 Ответ

0 голосов
/ 11 августа 2020

Публикуем это как ответ сообщества Wiki, основанный на ветке комментариев к вопросу. Не стесняйтесь обновлять и изменять его, добавляя более подробную информацию.

Как сообщил @Craig, решение заключалось в том, чтобы следовать идее первого редактирования. Используя пару сочетаний с async и await, можно обернуть моментальный снимок асинхронной функцией, а затем await запросом Firebase. Как только данные возвращены, можно проверить, найдено ли логическое значение, чтобы подтвердить, было ли найдено совпадение.

...