Angular。然后未定义

时间:2016-08-13 19:01:59

标签: javascript angularjs promise angular-promise

我正在尝试在Angularjs应用中实现this promise pattern。但someUserContent会根据需要返回值true而非实际数据。如何将数据传送给控制器?

在我的控制器中:

.controller('MyCtrl',function() {

   MyFactory.checkUser(userId) //returns true
   .then(MyFactory.prepDatabase())  //returns true
   .then(Myfactory.getUserContent()) //returns a someUserData
   .then(function(someUserData) {
       //do some stuff with all this data  
    });
}

工厂:

.factory('MyFactory', function($q,$http....) {

   MyFactory.prototype.checkUser = function(user_id) {
      var self = this;
      this.db = new PouchDB('users', {location: 'default'});   
      return $q.when(true);
   }

   Myfactory.prototype.getUserContent = function() {
    if (!self.someUserData) {
      return $q.when(self.db.allDocs({ include_docs: true}))
        .then(function(docs) { 
          self.someUserData = docs.rows.map(function(row) {
            return row.doc;
          });
          return $q.when(self.someUserData);
        })
    } else {
      return $q.when(self.someUserData);
    }
   }    
} 

1 个答案:

答案 0 :(得分:0)

尝试传递引用而不是调用方法。你正在进行异步调用,它需要等待promise返回,当你在内部执行它们时,他们没有承诺这就是你得到错误的原因。

Dockerfile

并更改您的工厂

 .then(MyFactory.prepDatabase) 
   .then(Myfactory.getUserContent)