javascript - Firebase 数组始终返回 false

标签 javascript firebase ionic-framework firebase-realtime-database

我正在使用 ionic 和 firebase 创建一个应用程序。我试图验证一个元素是否存在于我的数组中,如果存在,我需要返回 true,否则我需要返回 false。问题是,即使该项目存在于 firebase 中,它也总是返回 false。您能告诉我以下代码出了什么问题吗?

这是我的服务:

function IsReserved(id){
    var ref = fb.child('/reserved/').orderByChild('product').equalTo(id);
    ref.once("value").then(function(snapshot){
        snapshot.forEach(function(data){
            if(data.val().user === $rootScope.currentUser.$id){
                console.log(data.val().user + " * " + $rootScope.currentUser.$id);
                return true;
            }
        });
    });

    return false;
}

这是我的 Controller :

function Reservar(produto) {
if(!$rootScope.cart){
  $rootScope.cart = [];
  $rootScope.fprice = 0;
}

var user=$rootScope.currentUser;
var res = vm.IsReserved(produto.$id);
console.log(res);


if(res){
    console.log("já reservado");                
    return;
}

这是我的 firebase 结构:

-reserved:
     --KdS2cH1OJ5MhKAV6Yio:
            -product: "product1"
            -user: "W30BB1RMg1XhNo9og9cMo4Gpr4S2"

最佳答案

您的代码将无法工作,因为 firebase 是异步工作的。

您应该使用回调函数作为参数,如下所示:

function IsReserved(id, callback){
            var ref = fb.child('/reserved/').orderByChild('product').equalTo(id);
            ref.once("value").then(function(snapshot){
                snapshot.forEach(function(data){
                    if(data.val().user === $rootScope.currentUser.$id){
                        console.log(data.val().user + " * " + $rootScope.currentUser.$id);
                        callback(true);
                        return;
                    }
                });
            });
            
            return false; //-- This will always be executed before the code inside the .then, that's why your function always returns false
        }

在你的 Controller 上,像这样:

function Reservar(produto)
        {
            if(!$rootScope.cart){
              $rootScope.cart = [];
              $rootScope.fprice = 0;
            }

            var user=$rootScope.currentUser;
            vm.IsReserved(produto.$id, function(response){
               console.log(response);
               if(response){
                console.log("já reservado");                
               }
            });
  }
            

你能理解吗?

关于javascript - Firebase 数组始终返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42367976/

相关文章:

javascript - onclick 滑动向下翻页不起作用

javascript - 露天工作流看不到网络脚本变量

javascript - 如何使用 jQuery 以编程方式扩展 Fuelux Treeview 文件夹?

java - Firebase 电话身份验证

javascript - Firebase 数组转换为 AngularChart

用于三线性插值的 Javascript 函数

ios - 从 Firebase 删除后 Swift 3 UITableView 不更新

android - 火力地堡应用程序 : Firebase API initialization failure

android - 使用 Gradle 在 processDebugResources 上 ionic 构建错误

node.js - 尝试构建遗留 Node/Angular/ ionic 应用程序,在node-gyp命令上失败