2016-06-14 2 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; 
    } 
} 

isValidURLの関数呼び出しの前にifステートメント内の警告が実行されています。関数が最初に実行されるようにするにはどうすればよいですか?取得要求の関数呼び出しの前にJavascriptアラートが実行されます

+2

[非同期呼び出しから応答を返すにはどうすればいいですか?](http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call ) – David

+0

ヒント: 'isValidURL' *自体は' return'文を含んでいないので、その結果は常に 'undefined'と評価されます。これは" falsey "です。だから '!this.isValidURL()'は常に* trueになります。 – David

答えて

0

約束をしてください。ロングバージョンは、単にTS構文についてその$http戻り

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

わからない約束を使用し、この

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

またはショートバージョンがあるconsole.log呼び出しを魔女が、このような:

private isValidURL(url: string) { 
    return this.$http.get(url) 
    .then(() => true,() => false); 
} 
private anotherFunc() { 
    this.isValidURL(url) 
    .then(isValid => { 
     console.log(isValid ? 'Valid' : 'Invalid'); 
    }); 
} 
関連する問題