2016-06-14 3 views
1
private isValidURL(url: string) { 
    var isValid = false; 
    this.$http.get(url).then(
     (data) => { 
      console.log('success'); 
      isValid = true; 
     } 
    ).catch( 
     (reason) => { 
      console.log('failure ' + reason); 
      isValid = false; 
     } 
    ).then(
     () => { 
      return isValid; 
     } 
    ) 
} 
private anotherFunc() { 
    if (!this.isValidURL(url)) { 
     alert('Wrong URL'); 
     return false; 
    } 
} 

Die Warnung in der if-Anweisung wird vor dem Funktionsaufruf isValidURL ausgeführt. Wie stelle ich sicher, dass die Funktion zuerst ausgeführt wird?JavaScript-Warnung läuft vor Funktionsaufruf für Anforderung abrufen

+2

Mögliches Duplikat von [Wie gebe ich die Antwort von einem asynchronen Anruf zurück?] (Http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call) – David

+0

Hinweis: 'isValidURL' * selbst * enthält keine' return'-Anweisung, und daher wird das Ergebnis immer zu 'undefined' ausgewertet, was "falsey" ist. Also '! This.isValidURL()' wird * immer * wahr sein. – David

Antwort

0

Verwenden Sie ein Versprechen. Die lange Version, Hexe die console.log Anrufe ist diese

private isValidURL(url: string) { 
    return new Promise((resolve, reject) => { 
     this.$http.get(url).then(
      (data) => { 
       console.log('success'); 
       resolve(); 
      } 
     ).catch(
      (reason) => { 
       console.log('failure ' + reason); 
       reject(); 
      } 
     ); 
    } 

private anotherFunc() { 
    this.isValidURL(url).catch(){ 
     alert('Wrong URL'); 
     return false; 
    } 
} 

oder die kurze Version, verwenden Sie nur das Versprechen, dass $http kehrt

private isValidURL(url: string) { 
    return this.$http.get(url); 
}  
private anotherFunc() { 
    this.isValidURL(url).catch(){ 
     alert('Wrong URL'); 
     return false; 
    } 
} 
0

Nicht sicher ts Syntax, aber wie folgt aus:

private isValidURL(url: string) { 
    return this.$http.get(url) 
    .then(() => true,() => false); 
} 
private anotherFunc() { 
    this.isValidURL(url) 
    .then(isValid => { 
     console.log(isValid ? 'Valid' : 'Invalid'); 
    }); 
} 
Verwandte Themen