Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firebase查询函数返回未定义的_Javascript_Firebase_Firebase Realtime Database - Fatal编程技术网

Javascript Firebase查询函数返回未定义的

Javascript Firebase查询函数返回未定义的,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,我想写一个返回对象的查询函数。问题是,在我的例子中,函数返回undefined 问题是Firebase对数据库引用使用异步侦听器,因此无法从回调返回 您可以将返回对象存储到回调内的字典中。问题是Firebase使用异步侦听器来访问数据库引用,因此您无法从回调返回 您可以将返回对象存储到回调中的字典中。我会答应的 var filterDataAccordingToDate = function (ref, startTime, endTime) { var filterDataAccord

我想写一个返回对象的查询函数。问题是,在我的例子中,函数返回undefined


问题是Firebase对数据库引用使用异步侦听器,因此无法从回调返回


您可以将返回对象存储到回调内的字典中。

问题是Firebase使用异步侦听器来访问数据库引用,因此您无法从回调返回


您可以将返回对象存储到回调中的字典中。

我会答应的

var filterDataAccordingToDate = function (ref, startTime, endTime) {
    var filterDataAccordingToDatePromise = new Promise( function(resolve, reject) {
        ref.orderByChild('date').startAt(startTime).endAt(endTime).once('value', function(snap) {
            filteredObj = snap.val();
            resolve(filteredObj);
        });
    });
    return filterDataAccordingToDatePromise;
};

filterDataAccordingToDate(travelRef, 1466439004, 1466439011).then(function(result){
    //this callback will be trigger when firebase call finish.
    //result is what you set on the resolve.
    console.log("DATA RETURNED: " + util.inspect(result, false, null));
});

我会答应的

var filterDataAccordingToDate = function (ref, startTime, endTime) {
    var filterDataAccordingToDatePromise = new Promise( function(resolve, reject) {
        ref.orderByChild('date').startAt(startTime).endAt(endTime).once('value', function(snap) {
            filteredObj = snap.val();
            resolve(filteredObj);
        });
    });
    return filterDataAccordingToDatePromise;
};

filterDataAccordingToDate(travelRef, 1466439004, 1466439011).then(function(result){
    //this callback will be trigger when firebase call finish.
    //result is what you set on the resolve.
    console.log("DATA RETURNED: " + util.inspect(result, false, null));
});
如上所述,您不能从异步调用返回结果

您可以使用方法处理结果,直接调用异步调用,而不需要返回结果:

var filterDataAccordingToDate = function (ref, startTime, endTime) {
  ref.orderByChild('date').startAt(startTime).endAt(endTime)
    .once('value', function(snap) {
      var filteredObj = snap.val();

      console.log(util.inspect(filterDataAccordingToDate(filteredObj, false, null));
      doSomethingWith(filteredObj);
  });  
}

function doSomethingWith(obj) {
  console.log("DATA RETURNED: " + util.inspect(obj, false, null));
}

filterDataAccordingToDate(travelRef, 1466439004, 1466439011);
我想这一切都取决于你想对你的数据做什么,以及你想引用它多少次

注意:我建议将脚本放在一个自包含的函数中,以避免添加特定于单个功能的私有函数,这样就不会污染全局名称空间。 写了一篇关于立即调用函数表达式IILife的文章,或者你可以使用

编辑:正如建议的那样,您也可以使用,但请记住您希望支持的内容。

如上所述,您不能从异步调用返回结果

您可以使用方法处理结果,直接调用异步调用,而不需要返回结果:

var filterDataAccordingToDate = function (ref, startTime, endTime) {
  ref.orderByChild('date').startAt(startTime).endAt(endTime)
    .once('value', function(snap) {
      var filteredObj = snap.val();

      console.log(util.inspect(filterDataAccordingToDate(filteredObj, false, null));
      doSomethingWith(filteredObj);
  });  
}

function doSomethingWith(obj) {
  console.log("DATA RETURNED: " + util.inspect(obj, false, null));
}

filterDataAccordingToDate(travelRef, 1466439004, 1466439011);
我想这一切都取决于你想对你的数据做什么,以及你想引用它多少次

注意:我建议将脚本放在一个自包含的函数中,以避免添加特定于单个功能的私有函数,这样就不会污染全局名称空间。 写了一篇关于立即调用函数表达式IILife的文章,或者你可以使用

编辑:正如建议的那样,您也可以使用,但请记住您希望支持的内容