TypeError: Неможливо прочитати властивість "then" невизначеного


100
loginService.islogged() 

Наведена вище функція повертає рядок типу "не вдалося". Однак, коли я спробую запустити функцію на ній, вона поверне помилку

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результаті вийде рядок "не". Більше нічого.


4
У вас promiseтут немає.
Даніель А. Білий

що потрібно покликати, щоб отримати msg- що повинно повернути обіцянку.
Даніель А. Білий

Якщо помилка стосується undefined, то islogged()насправді returnце не значення. Визначення islogged(), ймовірно, буде джерелом ваших питань.
Джонатан Лоновський

Ймовірно, ваш метод islogged у певному випадку не повертає значення. Після цього я бачу, що ви НЕ використовуєте islogged як метод асинхронізації, тому він, ймовірно, взагалі не повертає обіцянку.
Андрій Каурін

@Jonathan Lonowski Я щойно опублікував функцію islogged. Сподіваюсь, що принесе більше розуміння.
Ezeewei

Відповіді:


133

Вам потрібно повернути свою обіцянку на функцію виклику.

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
Це було фактично причиною того, що мій завод не повернув обіцянки. Я забув зробити return $http.post. Як тільки я додав префікс returnдо $http, він почав працювати правильно.
Девнер

3
@Devner спасибі, я також забув пройти return.
ESR

2

TypeError: Неможливо прочитати властивість "then" невизначеного під час виклику служби Django за допомогою AngularJS.

Якщо ви викликаєте службу Python, код буде виглядати нижче:

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 
}

Ми використовуємо MongoDB як базу даних (я знаю, що це не має значення. Але якщо хтось шукає за допомогою MongoDB + Python (Django) + AngularJS, результат повинен прийти.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.