Reactjs 正在等待useEffect中的finish函数

Reactjs 正在等待useEffect中的finish函数,reactjs,firebase,Reactjs,Firebase,我想启动getRoom()函数和它里面的setRoomId。在这两个人完成工作后,我想运行getMessages(),因为我需要房间Id从数据库中获取信息。我尝试了我所知道的一切,但我不知道如何做到这一点 const [roomId, setRoomId] = useState(null) useEffect(() => { setLoading(true) { selectedFriend && getChat(); } setLoading(f

我想启动
getRoom()
函数和它里面的
setRoomId
。在这两个人完成工作后,我想运行
getMessages()
,因为我需要房间Id从数据库中获取信息。我尝试了我所知道的一切,但我不知道如何做到这一点

const [roomId, setRoomId] = useState(null)

useEffect(() => {
    setLoading(true)
    { selectedFriend && getChat(); }
    setLoading(false)
}, [selectedFriend])

const getChat = async () => {
    await getRoom()
    getMessages()
}

const getRoom = async () => {
    await firebase.firestore().collection('wiadomosci').get().then(resp => {
        let user1;
        let user2;

        resp.docs.map(element => {
            user1 = false;
            user2 = false;
            const users = element.data().users;
            user1 = users.includes(selectedFriend)
            user2 = users.includes(uid)
            if (user1 && user2) setRoomId(element.id)
        })
    })
}

const getMessages = () => {
    console.log(roomId)
    [getting some data with roomID]
}

你应该这样写:

const[roomId,setRoomId]=useState(null)
//组件安装
useffect(()=>{
会议室()
//请看这里[useEffect][1]
})
useffect(()=>{
//请看这里[useEffect][1]
如果(!正在加载&roomId){
getMessages()
}
},[室友])
const getRoom=async()=>{
设置加载(真)
等待firebase.firestore()集合('wiadomosci').get()。然后(resp=>{
让user1;
让用户2;
响应文档映射(元素=>{
user1=false;
user2=false;
const users=element.data().users;
user1=用户。包括(selectedFriend)
user2=用户。包括(uid)
if(user1&&user2)setRoomId(element.id)
})
})
设置加载(错误)
}
const getMessages=()=>{
console.log(roomId)
[使用roomID获取一些数据]
}

为什么需要使用
useCallback
?它用于记忆功能。您的数据总是最新的?您的解决方案运行良好。在get消息中,我使用了firebase提供的
onSnapshot()
,因此它是实时的。useCallback对我来说是新的,我只是想知道什么时候应该使用它。