প্রকারের ত্রুটি: অনির্ধারিত সম্পত্তি 'তারপরে' পড়তে পারে না


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এখানে নেই
ড্যানিয়েল এ। হোয়াইট

কি পেতে ডাকা প্রয়োজন যা msg- একটি প্রতিশ্রুতি ফিরে আসা উচিত।
ড্যানিয়েল এ। হোয়াইট

যদি ত্রুটিটি সম্পর্কিত হয় undefinedতবে islogged()আসলে returnকোনও মান হয় না । সংজ্ঞা islogged()সম্ভবত আপনার সমস্যার উত্স হতে পারে।
জোনাথন লোনোস্কি

এটি সম্ভবত আপনার আইলোগড পদ্ধতি কোনও ক্ষেত্রে কোনও মান ফেরত দেয় না। এর পরে আমি দেখতে পাচ্ছি আপনি অ্যাসিঙ্ক পদ্ধতি হিসাবে বিচ্ছিন্ন ব্যবহার করছেন না এটি সম্ভবত প্রতিশ্রুতি ফিরিয়ে দেয় না।
আন্দ্রেজ কাউরিন

@ জোনাথন লোনভস্কি আমি সবেমাত্র বিচ্ছিন্ন ফাংশন পোস্ট করেছি। আশা করি আরও অন্তর্দৃষ্টি আসবে।
ইজিওয়েই

উত্তর:


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এটি সঠিকভাবে কাজ করা শুরু করে।
ডেভনার

4
@Devner আপনাকে ধন্যবাদ, আমি পাস ভুলে গিয়েছিলেন returnহিসাবে ভাল।
ইএসআর

3

প্রকারের ত্রুটি: অ্যাংুলারজেএস ব্যবহার করে জ্যাঙ্গো পরিষেবা কল করার সময় অপরিজ্ঞিত সম্পত্তি 'তারপরে' পড়া যায় না।

আপনি যদি পাইথন পরিষেবাটিতে কল করছেন তবে কোডটি নীচের মত দেখাবে:

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 
}

আমরা মঙ্গোডিবিটিকে ডেটাবেস হিসাবে ব্যবহার করছি (আমি জানি এটি কোনও তাত্পর্যপূর্ণ নয় But তবে কেউ যদি মঙ্গোডিবি + পাইথন (জ্যাঙ্গো) + অ্যাঙ্গুলারজেএস দিয়ে অনুসন্ধান করছেন তবে ফলাফলটি আসা উচিত।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.