TypeError: Impossibile leggere la proprietà 'then' di undefined


100
loginService.islogged() 

La funzione sopra restituisce una stringa come "failed". Tuttavia, quando provo a eseguire la funzione su di esso, restituirà l'errore di

TypeError: Cannot read property 'then' of undefined

e il cursore è indicato subito dopo connectede prima .then.

Di seguito è riportata la funzione completa:

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');
});

AGGIORNARE

Ecco la islogged()funzione

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;
    });
}

Sono certo che il $checkSessionServerrisultato sarà una stringa "fallita". Niente di più.


4
Non hai un promisequi.
Daniel A. White

ciò che deve essere chiamato per ottenere una msg- che dovrebbe restituire una promessa.
Daniel A. White

Se l'errore riguarda undefined, in islogged()realtà non è returnun valore. La definizione di islogged()sarebbe probabilmente la fonte dei tuoi problemi.
Jonathan Lonowski

È probabile che in alcuni casi il tuo metodo islogged non restituisca un valore. Dopodiché vedo che NON stai usando islogged come metodo asincrono, quindi probabilmente non restituirà affatto promesse.
Andrej Kaurin

@ Jonathan Lonowski Ho appena pubblicato la funzione islogged. Spero che questo porti più informazioni.
Ezeewei

Risposte:


133

È necessario restituire la promessa alla funzione chiamante.

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
Questo è stato effettivamente il motivo per cui la mia fabbrica non ha restituito la promessa. Mi sono dimenticato di fare return $http.post. Non appena ho aggiunto il prefisso returna $http, ha iniziato a funzionare correttamente.
Devner

3
@ Devner grazie, avevo dimenticato di passare returnanche io .
ESR

2

TypeError: Impossibile leggere la proprietà 'then' di undefined quando si chiama un servizio Django utilizzando AngularJS.

Se stai chiamando un servizio Python, il codice apparirà come di seguito:

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 
}

Stiamo usando MongoDB come database (so che non importa. Ma se qualcuno sta cercando con MongoDB + Python (Django) + AngularJS il risultato dovrebbe arrivare.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.