在TypeScript中,如何在本地更改全局变量的值?

时间:2017-11-13 02:33:25

标签: javascript typescript

public login(username: string, password: string): string {

const options = {}; 
let flag = 1;  
this.auth0.client.login({realm: 'Username-Password-Authentication', username, password}, (err,authResult) => {
  if(err) {
    flag = 1;
    console.log(err);   
    return;
  }
  else if (authResult && authResult.accessToken && authResult.idToken) {
    let flag = 0;
    this.setSession(authResult);
    alert("Flag: " + flag);
  }
  else {  
    console.log(err); 
    return;
    //alert('Error: ${err.error_description}. Check the console for further details.'); console.log(username,password)
}
});
if(flag == 0) {
  alert(flag);
  return "Invalid credentials";
}
}

在此代码块中,永远不会执行“if(flag == 0)”语句,因为全局值为1.如何更改标志的全局值?

1 个答案:

答案 0 :(得分:1)

你的主要问题是:

let flag = 1

是异步的。这就是你传递回调函数的原因。

这意味着操作的顺序是:

  1. this.auth0.client.login();
  2. 使用if (flag == 0)
  3. 启动异步操作
  4. 测试flag //因为login()仍然等于1
  5. 当然不会触发
  6. 异步回调触发,你试图设置标志,但为时已晚。
  7. 你需要以某种方式将逻辑移动到事物的异步方面。这可能要求您的主is.auth0.client.login()接受在if(flag == 0) {}完成后可以触发的回调或使用承诺。

    您的else if测试需要以这种或那种方式进入回调。你可能不想在flag = 0;内创建一个新的局部变量 - 我想你想要let flag = 0;而不是{{1}}