I am working on a React project. I have two files contact.js
and functions.js
.
In contact.js
file
import {getUserContacts} from './functions.js';
useEffect(() => {
let temp=getUserContacts();
console.log(temp);
}, [])
In functions.js
file
export const getUserContacts = () => {
const contactDetailsArr = [];
db.collection("users").doc(userId).get()
.then(docs => {
const contactsObject = docs.data().contacts;
for (let contact in contactsObject) {
db.collection("users").doc(contact).get()
.then(userDetail => {
contactDetailsArr.push({
userId: contact,
lastMessage: contactsObject[contact].lastMsg,
time: contactsObject[contact].lastMsgTime,
email: userDetail.data().emailId,
active: userDetail.data().active,
img: userDetail.data().imageUrl
})
})
}
return contactDetailsArr;
})
.catch(err => {
console.log(err);
})
}
As one can see in the functions.js
when I console contactDetails
I am able to see the data. But in contact.js
when I console the returned data I get undefined
.
Please guide me on why I am seeing such behavior.
CodePudding user response:
You might have this result if there's a delay in your function logic
CodePudding user response:
I hope your
//function logic
done have any async stuff, otherwise
contactDetails
would be undefined at the time you call
getUserContacts
CodePudding user response:
Your logic of getUserContacts()
does not return
anything that's why you get undefined
. Try to add return
as below.
export const getUserContacts = () => {
const contactDetailsArr = [];
return db.collection("users").doc(userId).get()
.then(docs => {
const contactsObject = docs.data().contacts;
for (let contact in contactsObject) {
db.collection("users").doc(contact).get()
.then(userDetail => {
contactDetailsArr.push({
...
})
})
}
return contactDetailsArr;
})
.catch(err => {
console.log(err);
})
}