当前位置: 首页 > 知识库问答 >
问题:

从Firebase快照返回未定义的对象

隗高旻
2023-03-14

我实现了一个函数,希望返回保存在某个url下的对象。在下面的代码中,第一个“console.log(result);”从firebase位置返回正确的对象。第二个返回未定义。有人能解释一下为什么以及如何修复它吗?

    _getById: function(obj) {
        var url = "https://my-app.firebaseio.com/list/" + obj.groupId;
        console.log(url);
        var ref = new Firebase(url);
        var result = {};
        ref.on("value", function(snapshot) {
                result = snapshot.val(); //first
                console.log(result);
            }, function (errorObject) {
            }
        );
        console.log(result); //second
        return result;
    },

共有1个答案

屈翰飞
2023-03-14

数据是从Firebase异步加载的。因此,您会注意到第二个console.log()显示在第一个之前。不能返回正在异步加载的数据。

你必须改变你编码的方式。而不是“获取id,然后用它做些什么”,你需要“每当加载/更改id时做些什么”。

所以代替:

 var list = _getById({ groupId: 42});
 console.log("Our list is: "+list);

你会:

 _getById({ groupId: 42 }, function(list) {
   console.log("Our list is: "+list);
 });
_getById: function(obj, callback) {
    var url = "https://my-app.firebaseio.com/list/" + obj.groupId;
    console.log(url);
    var ref = new Firebase(url);
    var result = {};
    ref.on("value", function(snapshot) {
        result = snapshot.val(); //first
        callback(result);
    }, function (errorObject) {
    });
    console.log(result); //second
    return result;
},

在上面的代码中,我们将回调传递到\u getById(),并在加载列表时(以及每当列表更改时)调用该回调。

一些进一步的阅读材料:

  • Polymer Firebase:打印异步数据
  • 异步访问Firebase中的阵列
  • 正在尝试从Firebase获取子记录
  • 处理函数中的异步调用(Firebase)
 类似资料:
  • 我正在尝试为discord bot执行命令,它从MySQL表中输出整数。 我尝试使用async/await、Promissions和回调来实现这一点,但结果总是一样的。在这里,我用promise再次尝试,因为在过去它不知何故起了作用。现在不会了。 下面是返回promise的函数: 下面的代码将结果赋值给Access Level变量: Catch函数捕获表示“TypeError:无法读取未定义的属性

  • 问题内容: 因此,当我打开灯箱时,我试图禁止在页面上滚动,而我发现这个确实有用的脚本非常有用。不幸的是,当我在自己的页面上使用它时,它也禁止在灯箱中滚动。我开始用警报调试代码,只是发现该事件。wheelDelta在我的页面上返回“undefined”,而在JSFiddle中,它返回-120。 问题答案: jQuery事件处理程序中的对象不能反映真实事件。是IE和Opera的非标准事件属性,可通过j

  • 我之前问过这个问题,它与这个问题相关(如何从异步调用返回响应?),但它并没有解决我的问题 我是node.js的新手,我遇到了一些我无法处理的错误,或者找不到任何我理解的帮助。我使用express generator初始化应用程序。我试图通过一个api调用将我得到的对象发送到前端。我编写了一个类“StockClass.js”,其中包含一个函数makeApiCall(),该函数进行调用并返回对象。但当

  • 我是JS的新手,不明白为什么我的程序中的图像没有改变。所有的变量都运行良好。下面是片段 所有的图像都被命名为1.jpg,2.jpg,3.jpg,4.jpg,直到24。这是一种很奇怪的方式,我也知道,如果有人知道更好的方式,那会更好。

  • 我试图将值从数据库快照放入类对象的映射活动代码。 我的车站类别代码和位置类别代码。 在从firebase获取的地图上标记位置的代码。

  • 我有下面的函数,它可以正确地从响应中提取图像的前缀和后缀,并生成一个可变的结果,其中包含场馆图像的url。然而,当我返回结果时,我一直没有定义。这里出了什么问题?