2016-08-11 15 views
5

में काम नहीं करता मैं एक कस्टम अतुल्यकालिक सत्यापनकर्ता बनाने के लिए कोशिश कर रहा हूँ, अगर कोई ईमेल पहले से पंजीकृत है कि सर्वर और चेक करने के लिए चला जाता है।Http कोणीय 2 कस्टम अतुल्यकालिक सत्यापन

दुर्भाग्य से, ऐसा लगता है कि प्राप्त अनुरोध, निकाल दिया कभी नहीं है, क्योंकि कुछ भी नहीं होता। मैंने subscribe के अंदर एकाधिक console.logs की कोशिश की है, लेकिन वे नहीं चल पाए।

मैं अगर उस अनुरोध सत्यापनकर्ता के बाहर काम करता है देख लिया है, और यह होता है, तो यह है कि समस्या नहीं है।

import { Component } from '@angular/core'; 
import { FormGroup, FormBuilder, Validators, FormControl } from '@angular/forms'; 
import { Response, Http } from '@angular/http'; 

@Component({ 
    templateUrl: 'build/pages/welcome/signup/signup.html', 
    providers: [AuthService, CustomValidators] 
}) 
export class Signup { 

    signupForm: FormGroup; 

    constructor(private formBuilder: FormBuilder, private http: Http) { 

     this.signupForm = formBuilder.group({ 
      'email': ['', Validators.required, this.checkEmail], 
     }): 
    } 

    checkEmail(control: FormControl): Promise<any> { 

      const promise = new Promise<any>(
      (resolve, reject) => { 

       this.http.get('/sharealead/main.php?action=checkEmail').subscribe(
        (res: Response) => { 
         console.log('it never gets here'); 
         console.log(res) 
         if (res.text() == 'already there') { 
          resolve({'emailTaken': true}); 
         } else { 
          resolve(null); 
         } 
        }, 
        (err) => { 
         console.log('it never gets here'); 
         console.log(err); 
        } 
       ) 
      } 
     ); 
     return promise; 
    } 

} 

उत्तर

8

ऐसा इसलिए है क्योंकि आप फ़ंक्शन का संदर्भ देते हैं और आप this संदर्भ खो देते हैं। आप bind विधि या एक रैपिंग तीर समारोह का उपयोग कर सकते तय करने के लिए कि (घटक उदाहरण के लिए समारोह लिंक):

this.signupForm = formBuilder.group({ 
     'email': ['', Validators.required, this.checkEmail.bind(this) ], 
}); 

या

this.signupForm = formBuilder.group({ 
     'email': ['', Validators.required, (control:Control) => { 
      return this.checkEmail(control); 
     } ], 
}); 

आपके मामले में, this एक http शामिल नहीं है संपत्ति ...

+0

दरअसल, मूर्खतापूर्ण गलती, ऐसा लगता है कि मुझे जावास्क्रिप्ट में इस कीवर्ड के बारे में एक और सबक चाहिए (मैं आपके जवाब को 8 मिनट में स्वीकार्य मानता हूं, जब स्टैक ओवरफ्लो मुझे देता है) –

+0

आपका स्वागत है! हाँ, 'जावास्क्रिप्ट में this' कीवर्ड के उपयोग थोड़ा विशिष्ट है ... –

+0

आप भी कैसे क्षेत्र कलंक केवल पर इस तरह के सत्यापनकर्ता ट्रिगर करने के लिए मार्गदर्शन को खुश कर सकते हैं। मेरे मामले में, जब भी मैं टेक्स्ट बॉक्स में ईमेल टाइप कर रहा हूं, तब भी http अनुरोध भेज रहा है। (कोणीय में मुझे नहीं पता था कि async प्रमाणकों केवल * सब के बाद निकाल दिया जाता है * सिंक प्रमाणकों वैध वापसी: तो, इससे पहले कि मैं अपना ईमेल पता लिखना पूरा करने में, यह पहले से ही कई अनुरोध सर्वर –

संबंधित मुद्दे