poldeeek
poldeeek

Reputation: 333

Waiting for finish function in useEffect react

I want to start getRoom() function and setRoomId which is inside it. After these two finish their work I would like to run getMessages(), because I need room Id to take information from database. I tried everything I know and I don't know how to get this done.

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]
}

Upvotes: 0

Views: 133

Answers (1)

Pavel Petrovich
Pavel Petrovich

Reputation: 764

You should write some like that:

const [roomId, setRoomId] = useState(null)

// componentDidMount
useEffect(() => {
  getRoom()
// look here [useEffect][1]
})


useEffect(() => {
// look here [useEffect][1]
  if (!loading && roomId) {
    getMessages()
  }
}, [roomId])

const getRoom = async () => {
    setLoading(true)
    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)
        })
    })
    setLoading(false)
}

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

Upvotes: 1

Related Questions