无法访问承诺外的Firebase数据库快照值
问题描述:
我无法访问承诺外的快照值。我有这些功能无法访问承诺外的Firebase数据库快照值
function getAuthorData() {
metadataRef
.child("author")
.on("value", (snap) => {
return snap.val()
})
}
function getSiteSocialLinks() {
metadataRef
.child("social")
.on('value', (snap) => {
return snap.val();
})
}
function getFeaturedPosts() {
featuredRef.on('value', (snap) => {
return snap.val();
})
}
function getBlogPosts() {
blogPostsRef
.orderByChild('createOn')
.on('value', (snap) => {
return snap.val()
});
}
function getPostCategories() {
postRef
.child('categoryStats')
.on('value', (snap) => {
return snap.val();
});
}
function getTotalPostsLength() {
postRef
.child('nopp')
.on('value', (snap) => {
return snap.val();
})
}
,当我尝试这个
var ourPosts = getBlogPosts()
var ourCategories = getPostCategories()
var totalnumOfPosts = getTotalPostsLength()
console.log(`Our post: ${ourPosts}\n our categories: ${ourCategories}\n total number of posts: ${totalnumOfPosts}\n`)
这就是我得到
我们的岗位:未定义我们的类别:未定义的消息总数: 未定义
我真的不知道它是否有任何东西与范围有关。请帮助
答
您没有像您应该使用Promise。
试试这个:
getBlogPosts().then(value => {
console.log(value);
});
getPostCategories().then(value => {
console.log(value);
});
getTotalPostsLength().then(value => {
console.log(value);
});
而且每个metadataRef
前添加一个return
,是这样的:
function getAuthorData() {
return metadataRef
.child("author")
.on("value", (snap) => {
return snap.val()
})
}
function getSiteSocialLinks() {
return metadataRef
.child("social")
.on('value', (snap) => {
return snap.val();
})
}
function getFeaturedPosts() {
return featuredRef.on('value', (snap) => {
return snap.val();
})
}
function getBlogPosts() {
return blogPostsRef
.orderByChild('createOn')
.on('value', (snap) => {
return snap.val()
});
}
function getPostCategories() {
return postRef
.child('categoryStats')
.on('value', (snap) => {
return snap.val();
});
}
您可能需要了解一点点 “为什么承诺存在”,让你”你会明白为什么你需要以这种方式使用它。
异步代码会把你弄得像每一次 –
那么出路是什么? – Jalasem
使用承诺,因为它们是为了使用,也许?由于你的函数不返回任何东西,这有点困难 –