TypeError: ไม่สามารถอ่านคุณสมบัติ 'แล้ว' ของที่ไม่ได้กำหนด


101
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ที่นี่
Daniel

สิ่งที่เรียกว่าต้องได้รับmsg- ที่ควรคืนคำสัญญา
Daniel

หากข้อผิดพลาดเกี่ยวกับการundefinedแล้วislogged()ไม่จริงreturnค่า คำจำกัดความislogged()น่าจะเป็นที่มาของปัญหาของคุณ
Jonathan Lonowski

อาจเป็นไปได้ว่าเมธอด islogged ของคุณไม่ส่งคืนค่าในบางกรณี หลังจากนั้นฉันเห็นว่าคุณไม่ได้ใช้ islogged as async method ดังนั้นจึงอาจไม่คืนสัญญาเลย
Andrej Kaurin

@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มันก็เริ่มทำงานอย่างถูกต้อง
Devner

3
@ เดฟเนอร์ขอบคุณฉันลืมที่จะผ่านreturnเช่นกัน
ESR

3

TypeError: ไม่สามารถอ่านคุณสมบัติ 'แล้ว' ของไม่ได้กำหนดเมื่อเรียกใช้บริการ 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 ผลลัพธ์ก็ควรจะมา

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.