2017-06-05 69 views
1

我是新角度等,我一直在玩弄决心。然而,当我想传递一个本地布尔值时,我得到了未定义?我试图理解为什么。这下面是我的警惕,我的服务只是调用一个API,它正在通过。我想将一个布尔值传递给该解析附加到的组件,以便显示错误或不显示错误。Angular 2 Resolve - 局部变量范围

resolve(): boolean { 
    let passed: boolean; 
    let uid: string = window['appdata'].uid; 
    let tbt: string = window['appdata'].tbt 
    let lang: string = window['appdata'].apiUserLanguage; 

    if(uid != null || undefined && tbt != null && undefined){ 
     console.log('Uid is: ' + uid + ' tbt is: ' + tbt); 
     this.validateEmailService.emailCheck(uid, tbt, lang).subscribe( 
      data => { 
       passed = true; 
      }, 
      err => { 
       passed = false; 
      } 
     ); 
    } 
    console.log('Passed is: ' + passed); 
    return passed; 
} 

}

+0

东西从你的病情指出:undefined是falsy。 所以在你的情况:uid!= null || undefined && tbt!= null && undefined 这部分永远不会被评估:(undefined && tbt!= null && undefined)。 这应该是你的问题的一部分。 – Juan

+0

您正在设置异步传递的值,但是您正在同步记录该值。换句话说,'console.log('Passed is:'+ passed);'发生在this.validateEmailService.emailCheck'完成之前。 – Baruch

+0

谢谢巴鲁克,对于我的特殊使用情况,我想知道如果使用promise而不是observable,然后使用.then() –

回答

2

布尔将被退回,但你可以订阅可观察到的服务返回,因为订阅是 - 异步方法之后表现出来。尝试将其登录到订阅像这样&它的值将显示:)

resolve(): boolean { 
let passed: boolean; 
let uid: string = window['appdata'].uid; 
let tbt: string = window['appdata'].tbt 
let lang: string = window['appdata'].apiUserLanguage; 

if(uid != null || undefined && tbt != null && undefined){ 
    console.log('Uid is: ' + uid + ' tbt is: ' + tbt); 
    this.validateEmailService.emailCheck(uid, tbt, lang).subscribe( 
     data => { 
      passed = true; 
      console.log('Passed is: ' + passed);// Passed is: true 
     }, 
     err => { 
      passed = false; 
      console.log('Passed is: ' + passed);// Passed is: false 
     } 
    ); 
} 

return passed; 

}