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.


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
}

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.