TypeError: Tanımsız 'sonra' özelliği okunamıyor


100
loginService.islogged() 

Yukarıdaki işlev, "başarısız" gibi bir dizge döndürür. Ancak, çalıştırmayı denediğimde işlevini yerine getirdiğimde,

TypeError: Cannot read property 'then' of undefined

ve imleç hemen sonra connectedve öncesinde gösterilir .then.

Tam işlev aşağıdadır:

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

GÜNCELLEME

İşte islogged()fonksiyon

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

Bunun $checkSessionServer"başarısız" bir dizeyle sonuçlanacağından eminim . Daha fazlası yok.


4
Bir yok promiseburada.
Daniel A. White

a almak için ne çağrılması gerekiyor msg- bu bir söz vermelidir.
Daniel A. White

Hata ilgiliyse undefined, islogged()aslında returnbir değer değildir . Tanımı islogged()muhtemelen sorunlarınızın kaynağı olacaktır.
Jonathan Lonowski

Muhtemelen islog yönteminiz bazı durumlarda bir değer vermiyordur. Bundan sonra, eşzamansız yöntem olarak islog kullanmadığınızı görüyorum, bu nedenle muhtemelen söz vermiyor.
Andrej Kaurin

@Jonathan Lonowski islog işlevini az önce yayınladım. Umarım bu daha fazla fikir verir.
Ezeewei

Yanıtlar:


133

Sözünüzü arama fonksiyonuna geri vermelisiniz.

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
Aslında fabrikamın sözünü yerine getirmemesinin nedeni buydu. Yapmam unuttum return $http.post. En kısa sürede ben önek eklenmiş olarak returniçin $http, doğru çalışmaya başladı.
Devner

3
@Devner teşekkür ederim, ben de geçmeyi unutmuşum return.
ESR

2

TypeError: AngularJS kullanılarak bir Django hizmeti çağrılırken 'sonra' tanımsız özelliği okunamıyor.

Bir Python hizmetini arıyorsanız, kod aşağıdaki gibi görünecektir:

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 
}

Veritabanı olarak MongoDB kullanıyoruz (Farketmediğini biliyorum. Ama biri MongoDB + Python (Django) + AngularJS ile arama yapıyorsa sonuç gelmelidir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.