首页 > 解决方案 > 数组未在嵌套的 firestore get 中更新

问题描述

当我解决包含 Firestore 嵌套 get 的承诺时,为什么数组没有更新,我有点困惑。

代码如下:

let userArray = [];
  return new Promise(resolve => {
    channelPaticipationRef
      .where('channel', '==', channel.id)
      .get()
      .then(participationSnapshot => {
        participationSnapshot.forEach(participationDoc => {
          const participation = participationDoc.data();
          participation.id = participationDoc.id;
          if (participation.user != userId) {
            usersRef
              .doc(participation.user)
              .get()
              .then(user => {
                if (user.data()) {
                  const userData = user.data();
                  userArray = [
                    ...userArray,
                    {
                      userId: userData.id,
                      userFirstName: userData.firstName,
                      userLastName: userData.lastName,
                      userIsOnline: userData.isOnline,
                      userProfilePictureURL: userData.profilePictureURL,
                      userLastTimestamp: userData.lastOnlineTimestamp,
                    },
                  ];
                  console.log(1, userArray)
                }
              })
              .catch(error => console.log(error));
          }
          console.log(2, userArray)
        });
        console.log(3, userArray)
        resolve(userArray);
      });
  });

在控制台中它返回

2 []
2 []
3 []
1 [{…}]
1 (2) [{…}, {…}]

并且承诺返回一个空数组

如果我使用扩展运算符推送或更新数组,为什么它没有注册?

标签: javascriptfirebasereact-nativegoogle-cloud-firestore

解决方案


推荐阅读