TypeError:无法读取未定义的属性“ then”


100
loginService.islogged() 

上面的函数返回类似“ failed”的字符串。但是,当我尝试运行然后对其执行功能时,它将返回以下错误

TypeError: Cannot read property 'then' of undefined

并且光标指示在connected之前和之后.then

以下是全部功能:

var connected=loginService.islogged();
alert(connected);
connected.then(function(msg){
    alert("connected value is "+connected);
    alert("msg.data value is "+msg.data);
    if(!msg.data.account_session || loginService.islogged()=="failed")       
        $location.path('/login');
});

更新

这是islogged()功能

islogged:function(){
    var cUid=sessionService.get('uid');
    alert("in loginServce, cuid is "+cUid);
    var $checkSessionServer=$http.post('data/check_session.php?cUid='+cUid);
    $checkSessionServer.then(function(){
        alert("session check returned!");
        console.log("checkSessionServer is "+$checkSessionServer);
        return $checkSessionServer;
    });
}

我确定$checkSessionServer将会导致“失败”字符串。而已。


4
promise这里没有。
Daniel A. White

获得什么需要得到什么msg-应该返回承诺。
Daniel A. White

如果错误是关于undefined,则islogged()实际上return不是值。的定义islogged()可能是问题的根源。
乔纳森·洛诺夫斯基

在某些情况下,可能是您的islogged方法未返回值。之后,我看到您没有将islogged用作异步方法,因此它可能根本不返回promise。
安德烈·考林

@Jonathan Lonowski我刚刚发布了islogged函数。希望能带来更多的见识。
Ezeewei

Answers:


133

您需要将诺言返回给调用函数。

islogged:function(){
    var cUid=sessionService.get('uid');
    alert("in loginServce, cuid is "+cUid);
    var $checkSessionServer=$http.post('data/check_session.php?cUid='+cUid);
    $checkSessionServer.then(function(){
        alert("session check returned!");
        console.log("checkSessionServer is "+$checkSessionServer);
    });
    return $checkSessionServer; // <-- return your promise to the calling function
}

4
这实际上就是我的工厂没有兑现承诺的原因。我忘了做return $http.post。将前缀添加return到后$http,它便开始正常工作。
Devner '16

3
@Devner谢谢,我也忘记了通过return
ESR

2

TypeError:使用AngularJS调用Django服务时,无法读取未定义的'then'属性。

如果您正在调用Python服务,则代码如下所示:

this.updateTalentSupplier=function(supplierObj){
  var promise = $http({
    method: 'POST',
      url: bbConfig.BWS+'updateTalentSupplier/',
      data:supplierObj,
      withCredentials: false,
      contentType:'application/json',
      dataType:'json'
    });
    return promise; //Promise is returned 
}

我们使用MongoDB作为数据库(我知道这没关系。但是,如果有人使用MongoDB + Python(Django)+ AngularJS搜索,结果应该会出现。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.