在React native useEffect中,使用异步调用我得到了一个未定义的,在下面的情况下如何避免该未定义



这些都是我在UseEffect中使用的调用,因为延迟很短,我在TAGID中得到了未定义,后来我在setState中得到了数据和设置。现在的问题是,接下来我要调用firebase,它在Firestore数据库中存储了一个未定义的文档,以避免使用未定义或任何其他方法调用firebase。如何在useEffects中调用Firestore调用,或者在这种情况下如何避免未定义的调用。

useEffect(() => {
const fetchData = async () => {
const resData = await axios(apiURL);
if (resData.data) {
setTag(resData.data);
}
};
fetchData();
const TAGID = "" + tag.id + "";
const USERID = "" + viewer.id + "";
const tagsListener = db.doc(TAGID).onSnapshot(function (doc) {
if (doc.exists) {
const getData = doc.data();
setTaginfo(getData);
} else {
db.doc(TAGID).set(tagSaveData);
setTaginfo(tagSaveData);
}
});
return () => tagsListener();
}, []);

fetchData是一个异步函数,您应该等到它完成,您可以这样做:


fetchData().then(tag=> {
const TAGID = "" + tag.id + "";
const USERID = "" + viewer.id + "";
const tagsListener = db.doc(TAGID).onSnapshot(function (doc) {
if (doc.exists) {
const getData = doc.data();
setTaginfo(getData);
} else {
db.doc(TAGID).set(tagSaveData);
setTaginfo(tagSaveData);
}
});
}
)

在返回promise之后,我在返回的中也得到了未定义

useEffect(() => {
const fetchData = async () => {
const resData = await axios(apiURL);
if (resData.data) {
setTag(resData.data);
}
};

fetchData().then(newTagID =>{
if(tag){
tag.id
return;
}
})
const TAGID = "" + newTagID.id + "";
const USERID = "" + viewer.id + "";
const tagsListener = db.doc(TAGID).onSnapshot(function (doc) {
if (doc.exists) {
const getData = doc.data();
setTaginfo(getData);
} else {
db.doc(TAGID).set(tagSaveData);
setTaginfo(tagSaveData);
}
});
return () => tagsListener();
}, []);

相关内容

最新更新