TypeError:未定義のプロパティ 'then'を読み取れません


99
loginService.islogged() 

上記の関数は、「失敗」のような文字列を返します。しかし、それを実行しようとすると、関数でエラーが返されます

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-これはpromiseを返す必要があります。
Daniel A. White

エラーがに関するものundefinedである場合、islogged()実際にreturnは値ではありません。の定義がislogged()問題の原因である可能性があります。
Jonathan Lonowski、2014

isloggedメソッドが値を返さない場合があります。その後、あなたはisloggedを非同期メソッドとして使用していないので、おそらくpromiseをまったく返さないでしょう。
Andrej Kaurin 14

@Jonathan Lonowski islogged関数を投稿しました。より多くの洞察をもたらすことを願っています。
Ezeewei 2014

回答:


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 2016年

3
@Devnerありがとうございます。私returnも合格するのを忘れていました。
ESR

2

TypeError:AngularJSを使用してDjangoサービスを呼び出すときに、undefinedのプロパティ '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で検索している場合、結果が表示されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.