gpt4 book ai didi

javascript - 工厂中的 Firebase 查询

转载 作者:太空宇宙 更新时间:2023-11-04 16:12:52 25 4
gpt4 key购买 nike

我正在努力处理 Firebase 查询,我有这个工厂:

.factory("usuariosFac", ["$firebaseArray","$q","$firebaseObject",
function($firebaseArray,$q,$firebaseObject) {
return {

getByEmail: function(email){
var ref = firebase.database().ref("usuarios");
var query=ref.orderByChild("email").equalTo(email).on("child_added", function(data) {
console.log(data.val());
return data.val();
});
}
}

}
])

这个函数在我的 Controller 中:

$scope.findUser = function() {
$scope.usuario=usuariosFac.traeGrupoPorEmail($scope.formLogin.usuario);
};

当我运行它时,工厂内的控制台日志打印正常。但是 $scope.usuario 是未定义的,这是为什么?

最佳答案

But $scope.usuario is Undefined, why is this?

回调函数被异步调用。嵌套函数内的 return 语句不会将值返回给父函数。

相反,创建并返回一个 promise :

app.factory("usuariosFac", ["$firebaseArray","$q","$firebaseObject",
function($firebaseArray,$q,$firebaseObject) {
return {

getByEmail: function(email){
//Create defer object
var future = $q.defer();
var ref = firebase.database().ref("usuarios");
var query=ref.orderByChild("email")
.equalTo(email)
.once("child_added",
function onSuccess(data) {
console.log(data.val());
//RESOLVE
future.resolve(data.val());
},
function onReject(error) {
//OR REJECT
future.reject(error);
}
);
//RETURN promise
return future.promise;
}
}

}
])

在 Controller 中,使用返回的 Promise 的 .then 方法:

$scope.findUser = function() {
var promise = usuariosFac.traeGrupoPorEmail($scope.formLogin.usuario);
promise.then(function onSuccess(data) {
$scope.usuario = data;
}).catch(function onReject(error) {
console.log(error);
throw error;
});
};

关于javascript - 工厂中的 Firebase 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41326601/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com