gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 03:03:56 27 4
gpt4 key购买 nike

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。如何更改 flag 的全局值?

最佳答案

您的主要问题是:

this.auth0.client.login()

是异步的。这就是为什么你要向它传递一个回调函数。

这意味着操作顺序是:

  1. 让标志 = 1;
  2. 使用 this.auth0.client.login() 启动异步操作
  3. test if (flag == 0)//这当然不会触发,因为 flag 仍然等于 1
  4. 异步回调触发,您尝试设置标志,但为时已晚。

您需要以某种方式将逻辑转移到事物的异步方面。这可能需要您的主 login() 接受一个回调,您可以在 is.auth0.client.login() 完成或使用 Promise 时触发该回调。

无论如何,您的 if(flag == 0) {} 测试需要位于回调内部。而且您可能不想在 else if 内创建新的局部变量 - 我认为您想要 flag = 0; 而不是 let flag = 0;

关于javascript - 在 TypeScript 中,如何在本地更改全局变量的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47256311/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com