TypeError: Không thể đọc thuộc tính 'then' của không xác định


99
loginService.islogged() 

Hàm trên trả về một chuỗi như "fail". Tuy nhiên, khi tôi cố gắng chạy sau đó hoạt động trên nó, nó sẽ trả về lỗi

TypeError: Cannot read property 'then' of undefined

và con trỏ được chỉ ra ngay sau connectedvà trước đó .then.

Dưới đây là chức năng đầy đủ:

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

CẬP NHẬT

Đây là islogged()chức năng

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

Tôi chắc chắn rằng $checkSessionServersẽ dẫn đến một chuỗi "không thành công". Chỉ có bấy nhiêu thôi.


4
Bạn không có promiseở đây.
Daniel A. White,

những gì cần được gọi để nhận được một msg- điều đó sẽ trả về một lời hứa.
Daniel A. White,

Nếu lỗi liên quan đến undefined, thì islogged()thực tế không phải là returnmột giá trị. Định nghĩa của islogged()có thể sẽ là nguồn gốc của các vấn đề của bạn.
Jonathan Lonowski,

Có thể là phương thức bị khóa của bạn không trả về giá trị trong một số trường hợp. Sau đó, tôi thấy rằng bạn KHÔNG sử dụng phương thức islogged async vì vậy nó có thể không trả lại lời hứa nào cả.
Andrej Kaurin,

@Jonathan Lonowski Tôi vừa đăng chức năng được đăng. Hy vọng rằng sẽ mang lại cái nhìn sâu sắc hơn.
Ezeewei,

Câu trả lời:


133

Bạn cần trả lại lời hứa của mình cho chức năng gọi.

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
Đây thực sự là lý do tại sao nhà máy của tôi không trả lại lời hứa. Tôi đã quên làm return $http.post. Ngay sau khi tôi thêm tiền tố returnvào $http, nó bắt đầu hoạt động bình thường.
Devner

3
@Devner cảm ơn bạn, tôi cũng đã quên vượt qua return.
ESR

2

TypeError: Không thể đọc thuộc tính 'then' của không xác định khi gọi dịch vụ Django bằng AngularJS.

Nếu bạn đang gọi một dịch vụ Python, mã sẽ giống như bên dưới:

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 
}

Chúng tôi đang sử dụng MongoDB làm cơ sở dữ liệu (Tôi biết điều đó không quan trọng. Nhưng nếu ai đó đang tìm kiếm với MongoDB + Python (Django) + AngularJS thì kết quả sẽ đến.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.