如何在服务中使用 Promise AngularJS?示例数据 Firebase
How to use Promise in Service AngularJS? Sample Data Firebase
这是我的 service.js 文件:
angular.module('starter.services', [])
.factory('firebaseData', function() {
return {
refUserFacebook: function (userUid) {
var firebaseRef = new Firebase("https://sweltering-heat-772.firebaseio.com/users/");
var user;
firebaseRef.once('value', function(dataSnapshot) {
var users = dataSnapshot.val();
var userKeys = Object.keys(users);
for (var i = 0, len = userKeys.length; i < len; i ++){
if (users[userKeys[i]].uid == userUid){
user = users[userKeys[i]];
}
}
console.log(user);
return user;
});
}
}
})
这是我的控制器文件名item.js文件
angular.module('starter.controllers.item', [])
.controller('ItemCtrl', function($scope, firebaseData) {
var ref = firebaseData.ref();
var userUid = ref.getAuth();
var user = firebaseData.refUserFacebook(userUid.uid);
console.log(user);
})
当然,我会先在 item.js 控制器中获取 undefined,然后在服务 return 中获取用户。
我真的很想在我的控制器中使用 Promise 技术,以 return 从服务中获得用户价值。
在 item.js 文件中,它类似于:
firebaseData.refUserFacebook(userUid.uid).then(function(user){
console.log(user); //Promise after retrieving value from service.js
});
如有任何帮助,我们将不胜感激。
谢谢
下次您应该至少提供一些您尝试的代码...但这就是您想要的:
angular.module('starter.services', [])
.factory('firebaseData', function($q) {
return {
refUserFacebook: function (userUid) {
var firebaseRef = new Firebase("https://sweltering-heat-772.firebaseio.com/users/");
var user;
var deferred = $q.defer();
firebaseRef.once('value', function(dataSnapshot) {
var users = dataSnapshot.val();
var userKeys = Object.keys(users);
for (var i = 0, len = userKeys.length; i < len; i ++){
if (users[userKeys[i]].uid == userUid){
user = users[userKeys[i]];
}
}
console.log(user);
deferred.resolve(user);
});
return deferred.promise;
}
}
})
这是我的 service.js 文件:
angular.module('starter.services', [])
.factory('firebaseData', function() {
return {
refUserFacebook: function (userUid) {
var firebaseRef = new Firebase("https://sweltering-heat-772.firebaseio.com/users/");
var user;
firebaseRef.once('value', function(dataSnapshot) {
var users = dataSnapshot.val();
var userKeys = Object.keys(users);
for (var i = 0, len = userKeys.length; i < len; i ++){
if (users[userKeys[i]].uid == userUid){
user = users[userKeys[i]];
}
}
console.log(user);
return user;
});
}
}
})
这是我的控制器文件名item.js文件
angular.module('starter.controllers.item', [])
.controller('ItemCtrl', function($scope, firebaseData) {
var ref = firebaseData.ref();
var userUid = ref.getAuth();
var user = firebaseData.refUserFacebook(userUid.uid);
console.log(user);
})
当然,我会先在 item.js 控制器中获取 undefined,然后在服务 return 中获取用户。
我真的很想在我的控制器中使用 Promise 技术,以 return 从服务中获得用户价值。
在 item.js 文件中,它类似于:
firebaseData.refUserFacebook(userUid.uid).then(function(user){
console.log(user); //Promise after retrieving value from service.js
});
如有任何帮助,我们将不胜感激。
谢谢
下次您应该至少提供一些您尝试的代码...但这就是您想要的:
angular.module('starter.services', [])
.factory('firebaseData', function($q) {
return {
refUserFacebook: function (userUid) {
var firebaseRef = new Firebase("https://sweltering-heat-772.firebaseio.com/users/");
var user;
var deferred = $q.defer();
firebaseRef.once('value', function(dataSnapshot) {
var users = dataSnapshot.val();
var userKeys = Object.keys(users);
for (var i = 0, len = userKeys.length; i < len; i ++){
if (users[userKeys[i]].uid == userUid){
user = users[userKeys[i]];
}
}
console.log(user);
deferred.resolve(user);
});
return deferred.promise;
}
}
})