【问题标题】:Ionic + Firebase unable return a promise with fetched data from DBIonic + Firebase 无法返回从数据库获取数据的承诺
【发布时间】:2018-07-27 15:12:54
【问题描述】:

我是 Firebase 和 Ionic 的新手,目前正在尝试在加载某个视图时从服务器获取一些数据。现在我能够在服务中获取数据,但我无法将获取的data 作为对控制器的承诺返回。这是调用服务的代码:

 $scope.$on('$ionicView.beforeEnter', function () {
    var user = firebase.auth().currentUser;       
    fireBaseService.getDataFromDB(user.uid).then(function(res){
      console.log(res); 
    });

这里是调用 Firebase API 的服务:

this.getDataFromDB = function(uid){
    return firebase.database().ref('table/' + uid).on('value', function(snapshot) {
        var data = snapshot.val(); //data is available here
        return data;
    });
}


这是我得到的错误:

TypeError: fireBaseService.getExpensesFromDB(...).then is not a function

【问题讨论】:

  • 我只是在这里猜测,但我认为通常来自firebaseService 的响应会返回Observables,但您正试图通过thenPromise 的身份访问它。你可能想.subscribe() 代替?
  • 我在服务中获取数据,只是无法将其返回给发起调用的控制器。你能详细说明一下订阅方法吗?
  • 您的代码中究竟在哪里定义了getExpensesFromDB(...)?它是您登录控制台的方法吗?如果是这种情况,则您缺少返回语句。
  • getDataFromDB 方法存在于名为fireBaseService 的服务中,并被注入到控制器中。调用服务后,控制台部分的日志记录在控制器内部。我在服务中获取数据,然后返回 firebase ref 和响应本身(两个返回语句)
  • 是的,但在您的错误消息中显示fireBaseService.getExpensesFromDB(...).then is not a function,但我在您的代码中的任何地方都看不到此方法。也许你正在调用一个未定义的函数。

标签: firebase ionic-framework firebase-realtime-database


【解决方案1】:
call from controller
fireBaseService.getDataFromDB(user.uid, function(res) {
  console.log(res);
}

service call
getDataFromDB = function(uid, callback){
    return firebase.database().ref('table/' + uid).on('value', function(snapshot) {
        var data = snapshot.val(); //data is available here
        callback(data);
    });
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-04
    • 2018-10-12
    相关资源
    最近更新 更多