1. ホーム
  2. javascript

[解決済み] TypeError: 未定義のプロパティ 'then' を読み取ることができません。

2022-01-31 07:28:27

質問

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 を実行すると、"failed" という文字列が表示されます。それ以上はありません。

どのように解決するのですか?

呼び出した関数にプロミスを返す必要があります。

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
}