无法访问承诺外的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`) 

这就是我得到

我们的岗位:未定义我们的类别:未定义的消息总数: 未定义

我真的不知道它是否有任何东西与范围有关。请帮助

+0

异步代码会把你弄得像每一次 –

+0

那么出路是什么? – Jalasem

+1

使用承诺,因为它们是为了使用,也许?由于你的函数不返回任何东西,这有点困难 –

您没有像您应该使用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(); 
    }); 
} 

您可能需要了解一点点 “为什么承诺存在”,让你”你会明白为什么你需要以这种方式使用它。