Firebase 值已正确提取但无法访问?

Posted

技术标签:

【中文标题】Firebase 值已正确提取但无法访问?【英文标题】:Firebase values are properly pulled but cannot be accessed? 【发布时间】:2016-09-13 13:27:07 【问题描述】:

我遇到了一个奇怪的问题,一旦我将一个值推送到 Firebase 对象,就会发生两件事:

    当我从 Firebase 拉取对象时,我无法在收到的数组中访问它。 我收到的数组没有length 属性。

这是我的 Firebase 结构的样子:

"user_solutions": 
    "0":
        
            "user_id": 0,
            "clue_id": 0,
            "hunt_id": 0,
            "completed": 1
        ,
    "1":
        
            "user_id": 0,
            "clue_id": 1,
            "hunt_id": 0,
            "completed": 0
        ,
    "2":
        
            "user_id": 0,
            "clue_id": 1,
            "hunt_id": 1,
            "completed": 0
        
  ,
  "-KHxBMZwVMzyiMIcbMdr":
      
         clue_id: 1,
         completed: 0,
         hunt_id: 0,
         user_id: 0
     

这是有问题的函数:

userSolutionsRef.orderByChild('user_id').startAt(0).endAt(0).once('value', (snap) => 
        var solution = snap.val(); 
        for (var i = 0; i < solution.length; i++) 
            if (solution[i].hunt_id == 0) 
                solutionsForThisHunt.push(solution[i]);
            
        
        this.populateArray(solutionsForThisHunt);
    );

当我运行调试器时,solution 的值为 Object 0: Object, 1: Object, 2: Object, -KHxBMZwVMzyiMIcbMdr: Object,但 length 属性未定义。 solutionsForThisHunt 永远不会被填充。此外,我可以通过snap.val()[0]/snap.val()[1]/snap.val()[2] 在调试器中单独访问对象,但由于某种原因,当我尝试访问snap.val()[3] 时,它是未定义的,尽管它应该被填充。

【问题讨论】:

snap.val 是返回一个真正的数组还是另一个可迭代的数组? Array.isArray 返回什么? (developer.mozilla.org/de/docs/Web/javascript/Reference/…) 你是对的!我的印象是它返回了一个数组,但它只是一个可迭代的。您的解决方案有效,谢谢。 Firebase 不会在此处返回数组,因为看起来您将密钥存储为字符串。 Storing them as integers would make a difference,虽然我总是建议不要depend on array semantics when it comes to Firebase。 【参考方案1】:

解决方案似乎是一个带有键的对象,而不是一个数组。您可以执行以下操作

var solution = snap.val(); 
var array = Object.keys(solution).map(key => ( ...solution[key], id: key ));
for ....

【讨论】:

以上是关于Firebase 值已正确提取但无法访问?的主要内容,如果未能解决你的问题,请参考以下文章

如果超时或无法访问服务器,Fire base 不会调用 onCancelled

NextAuth Firebase 后端“ReferenceError:初始化前无法访问‘应用’”

无法在flutter中访问Firebase Firestore doc的字段[重复]

@firebase/firestore:Firestore (8.6.2):无法访问 Cloud Firestore 后端(React Js)

错误:无法获取 Firebase 项目项目名称。请确保该项目存在并且您的帐户有权访问它

无法使用 cloudways 服务器访问 Firebase 存储。没有“访问控制允许来源”