我的$ firebase $ loaded服务中的诺言有什么问题?

抛光

我正在学习AngularJS和Firebase,并使用AngularFire 0.8.2(我知道是旧的)。我想要一个函数(getAccount)从Firebase返回与initAccount相同的数组。firebase URL有效,但是我不知道如何使函数返回数组。任何帮助,将不胜感激 :)

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;
};

});

黑us

您可以使用$q服务使您的函数返回承诺。这是你的代码

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); 
    });
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章