无法在promises之外访问firebase数据库快照值

时间:2017-07-02 23:43:35

标签: javascript firebase scope firebase-realtime-database promise

我无法在承诺之外访问快照值。我有这些功能

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`)

当我尝试这个时

import numpy as np
import pprint
pp = pprint.PrettyPrinter(indent=4)

# A sample Group - 3 members - with categorical indicators
Group1=np.array([[1,3,4,5,3,3,1,1,1],[4,3,3,1,3,3,0,1,0],[4,3,3,1,3,3,0,1,0]])
mu=np.mean(Group1,axis=0)
print("Multi dimentional group center: ")
pp.pprint(mu)
print("Multi dimentional average distance from center: ")
pp.pprint(
    np.mean(
        [np.linalg.norm(mu-point) for point in Group1]
    ))

这就是我得到的

  

我们的帖子:未定义我们的类别:未定义的帖子总数:   未定义

我真的不知道它是否与范围有关。请帮忙

1 个答案:

答案 0 :(得分:0)

你没有使用Promise。

试试这个:

getBlogPosts().then(value => {
  console.log(value);
});

getPostCategories().then(value => {
  console.log(value);
});

getTotalPostsLength().then(value => {
  console.log(value);
});

在每个return之前添加metadataRef,例如:

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();
  });
}

您可能需要阅读一些关于"为什么承诺存在",以便您了解为什么需要以这种方式使用它。