Firebase阵列总是返回false
我正在用离子和firebase创建应用程序。我试图验证一个元素是否存在于我的数组中,如果它存在,我需要返回true,否则我需要返回false。问题是,它总是返回false,即使该项目存在于Firebase中。你能告诉我下面的代码出了什么问题吗?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;
}
这里是我的控制器:
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;
}
这里是我的火力strucure:
-reserved:
--KdS2cH1OJ5MhKAV6Yio:
-product: "product1"
-user: "W30BB1RMg1XhNo9og9cMo4Gpr4S2"
您的代码将无法工作,因为火力点以异步方式工作。
您应该使用一个回调函数作为参数,像这样:
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
}
你控制器上,这样的事情:
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");
}
});
}
你能理解吗?
来源的作品,但在foreach需要打破它返回true。你的来源不制动,有什么想法? (你是BR?) –
@LucasGaspar,你应该评论/删除返回false,如果(data.val()。用户=== $ rootScope.currentUser。$ id)应该返回1记录不是多个,如果不是,那么代码必须重新写入forloop – digit
@LucasGaspar Sim,BR!我认为你可以在forEach中调用回调之后添加'return;'。 –
请发布您的Firebase结构的片段,请以文字方式发送,不要有图片。 – Jay
- 保留 --KdS2cH1OJ5MhKAV6Yio -product: “produtc1” -user: “W30BB1RMg1XhNo9og9cMo4Gpr4S2” –