TypeError: Tidak dapat membaca properti 'kemudian' dari yang tidak ditentukan

100
loginService.islogged() 

Fungsi di atas mengembalikan string seperti "gagal". Namun, ketika saya mencoba menjalankan lalu berfungsi di atasnya, itu akan mengembalikan kesalahan

TypeError: Cannot read property 'then' of undefined

dan kursor diindikasikan tepat setelah connecteddan sebelum .then.

Di bawah ini adalah fungsi lengkapnya:

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

MEMPERBARUI

Ini islogged()fungsinya

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

Saya yakin bahwa ini $checkSessionServerakan menghasilkan string "gagal". Tidak ada lagi.

Ezeewei
sumber
4
Anda tidak punya di promisesini.
Daniel A. White
apa yang perlu dipanggil untuk mendapatkan msg- yang seharusnya mengembalikan janji.
Daniel A. White
Jika kesalahannya menyangkut undefined, maka islogged()sebenarnya bukan returnnilai. Definisi dari islogged()kemungkinan akan menjadi sumber masalah Anda.
Jonathan Lonowski
Mungkin metode islog Anda tidak mengembalikan nilai dalam beberapa kasus. Setelah itu saya melihat bahwa Anda TIDAK menggunakan metode islogged async sehingga mungkin tidak mengembalikan janji sama sekali.
Andrej Kaurin
@Jonathan Lonowski Saya baru saja memposting fungsi islogged. Semoga membawa lebih banyak wawasan.
Ezeewei

Jawaban:

133

Anda harus mengembalikan janji Anda ke fungsi panggilan.

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
}
TheSharpieOne
sumber
4
Ini sebenarnya alasan mengapa pabrik saya tidak mengembalikan janjinya. Saya lupa melakukannya return $http.post. Segera setelah saya menambahkan awalan returnke $http, itu mulai bekerja dengan benar.
Devner
3
@Devner terima kasih, saya lupa untuk lulus returnjuga.
ESR
2

TypeError: Tidak dapat membaca properti 'then' dari tidak terdefinisi saat memanggil layanan Django menggunakan AngularJS.

Jika Anda memanggil layanan Python, kodenya akan terlihat seperti di bawah ini:

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 
}

Kami menggunakan MongoDB sebagai database (saya tahu itu tidak masalah. Tetapi jika seseorang mencari dengan MongoDB + Python (Django) + AngularJS, hasilnya akan datang.

Haris Np
sumber