【问题标题】:angularjs cannot read property then of undefined [duplicate]angularjs无法读取未定义的属性[重复]
【发布时间】:2016-09-14 13:58:07
【问题描述】:

我正在尝试将 mongodb 集合从我的服务器返回到客户端,但在服务器端控制器上得到 Cannot read property then of undefined。我知道承诺有问题,但似乎无法解决。需要哪些代码更改来解决此问题?如果需要更多代码 sn-ps,请告诉我。

以下函数中的“.then(....)”出现错误。

course.controller.js

function getAll(req,res){
    CourseService.getAll()
        .then(function(result){
            if(result){
                res.send(result);
            }else{
                res.sendStatus(404);
            }
        })
        .catch(function(err){
            res.status(400).send(err);
        });
}

CourseService 调用这个函数:

course.service.js

function getAll(){
    console.log('services/course.service  getALL');
    var deferred = Q.defer();

    db.collection('courses').find().toArray(function(err, result) {
        if (err) deferred.reject(err);
        console.log(result);
        deferred.resolve();
        return deferred.promise;
    });   
}

【问题讨论】:

    标签: javascript angularjs mongodb promise deferred


    【解决方案1】:

    当您尝试将.then 函数应用于promise 时,但promise 对象尚未从getAll 函数返回。从 getAll 函数返回 deferred.promise 对象将返回承诺。

    代码

    function getAll(){
        console.log('services/course.service  getALL');
        var deferred = Q.defer(); //assuming `Q` is `$q` dependency instance
    
        db.collection('courses').find().toArray(function(err, result) {
            if (err) deferred.reject(err);
            console.log(result);
            deferred.resolve();
        });   
        return deferred.promise; //return promise from here
    }
    

    你有那个已经返回的承诺,但它不存在 正确的地方,把它从.collection函数中取出来。

    【讨论】:

      【解决方案2】:

      你需要把return语句移到外面:

      function getAll(){
          console.log('services/course.service  getALL');
          var deferred = Q.defer();
      
          db.collection('courses').find().toArray(function(err, result) {
              if (err) deferred.reject(err);
              console.log(result);
              deferred.resolve();
          });   
      
          return deferred.promise;
      }
      

      【讨论】:

        猜你喜欢
        • 2018-02-04
        • 1970-01-01
        • 2016-10-23
        • 2017-04-28
        • 2019-09-16
        • 2016-07-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多