我在服务中的 $firebase $loaded 承诺有什么问题?
What's wrong with my $firebase $loaded promise in a service?
我正在学习 AngularJS 和 Firebase 并使用 AngularFire 0.8.2(我知道的是旧版本)。
我想要一个函数 (getAccount) 到 return 一个与 firebase 的 initAccount 相同的数组。 firebase URL 可以工作,但我不知道如何使函数 return 成为数组。任何帮助将不胜感激:)
app.service('DataService', function(FURL, $firebase) {
var ref = new Firebase(FURL);
//initial account array to load
this.account = [
{'info':'Sig1'},
{'info':'Sig2'},
{'info':'Sig3'}
];
this.getAccount = function(user) {
var uid = user.uid;
var dir = 'profile/' + uid + '/account';
var accountSigs = $firebase(ref.child(dir)).$asArray().$loaded().then(function(response) {
//show response returns [[object Object],[object Object],[object Object]] with correct data as it should.
console.log('show response: [' + response + ']');
return response;
});
// this returns [[object Object]] but I don't know why
console.log('show accountSigs: [' + accountSigs + ']');
return accountSigs;
};
});
您可以使用 $q
服务使您的函数 return 成为一个承诺。
这是你的代码
app.service('DataService', function (FURL, $firebase, $q) {
var ref = new Firebase(FURL);
//initial account array to load
this.account = [
{'info': 'Sig1'},
{'info': 'Sig2'},
{'info': 'Sig3'}
];
this.getAccount = function (user) {
var uid = user.uid;
var dir = 'profile/' + uid + '/account';
var defered = $q.defer();
var accountSigs = $firebase(ref.child(dir)).$asArray().$loaded().then(function (response) {
console.log('show response: [' + response + ']');
defered.resolve(response);
});
return defered.promise;
};
});
要使用它,只需调用您的函数,然后使用 then()
方法操作数据。
app.controller('MyController', function(DataService) {
DataService.getAccount().then(function (data) {
//Data will contain what is passed as parameter to defered.resolve()
console.log(data);
});
});
我正在学习 AngularJS 和 Firebase 并使用 AngularFire 0.8.2(我知道的是旧版本)。 我想要一个函数 (getAccount) 到 return 一个与 firebase 的 initAccount 相同的数组。 firebase URL 可以工作,但我不知道如何使函数 return 成为数组。任何帮助将不胜感激:)
app.service('DataService', function(FURL, $firebase) {
var ref = new Firebase(FURL);
//initial account array to load
this.account = [
{'info':'Sig1'},
{'info':'Sig2'},
{'info':'Sig3'}
];
this.getAccount = function(user) {
var uid = user.uid;
var dir = 'profile/' + uid + '/account';
var accountSigs = $firebase(ref.child(dir)).$asArray().$loaded().then(function(response) {
//show response returns [[object Object],[object Object],[object Object]] with correct data as it should.
console.log('show response: [' + response + ']');
return response;
});
// this returns [[object Object]] but I don't know why
console.log('show accountSigs: [' + accountSigs + ']');
return accountSigs;
};
});
您可以使用 $q
服务使您的函数 return 成为一个承诺。
这是你的代码
app.service('DataService', function (FURL, $firebase, $q) {
var ref = new Firebase(FURL);
//initial account array to load
this.account = [
{'info': 'Sig1'},
{'info': 'Sig2'},
{'info': 'Sig3'}
];
this.getAccount = function (user) {
var uid = user.uid;
var dir = 'profile/' + uid + '/account';
var defered = $q.defer();
var accountSigs = $firebase(ref.child(dir)).$asArray().$loaded().then(function (response) {
console.log('show response: [' + response + ']');
defered.resolve(response);
});
return defered.promise;
};
});
要使用它,只需调用您的函数,然后使用 then()
方法操作数据。
app.controller('MyController', function(DataService) {
DataService.getAccount().then(function (data) {
//Data will contain what is passed as parameter to defered.resolve()
console.log(data);
});
});