Reputation: 333
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
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