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.如何更改标志的全局值?
答案 0 :(得分:1)
你的主要问题是:
let flag = 1
是异步的。这就是你传递回调函数的原因。
这意味着操作的顺序是:
this.auth0.client.login()
; if (flag == 0)
flag
//因为login()
仍然等于1 你需要以某种方式将逻辑移动到事物的异步方面。这可能要求您的主is.auth0.client.login()
接受在if(flag == 0) {}
完成后可以触发的回调或使用承诺。
您的else if
测试需要以这种或那种方式进入回调。你可能不想在flag = 0;
内创建一个新的局部变量 - 我想你想要let flag = 0;
而不是{{1}}