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

Предупреждение внутри оператора if выполняется до вызова функции . Как я могу гарантировать, что функция будет выполнена в первую очередь?Предупреждение Javascript перед вызовом функции для получения запроса

+2

Возможный дубликат [Как вернуть ответ от асинхронного вызова?] (Http://stackoverflow.com/questions/14220321/how-do-return-the-response-from-an-asynchronous-call) – David

+0

Подсказка: 'isValidURL' * сам * не содержит оператора' return', и поэтому его результат всегда оценивается как 'undefined', что является« falsey ». Поэтому '! This.isValidURL()' будет * always * быть истинным. – David

ответ

0

Используйте обещание. Длинная версия, ведьма на console.log звонков это

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

или короткая версия, просто использовать обещание, что $http возвращает

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

Не уверен, что Ts синтаксиса, но как это:

private isValidURL(url: string) { 
    return this.$http.get(url) 
    .then(() => true,() => false); 
} 
private anotherFunc() { 
    this.isValidURL(url) 
    .then(isValid => { 
     console.log(isValid ? 'Valid' : 'Invalid'); 
    }); 
} 
Смежные вопросы