2016-06-14 61 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语句中的警报在isValidURL的函数调用之前执行。我如何确保函数先执行?函数调用获取请求之前运行的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()'将*总是*为真。 – 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'); 
    }); 
} 
相关问题