我有一个登录功能,我希望根据登录成功或错误显示警报。首先,我声明变量,然后根据结果进行取值,我给变量赋值。
完成提取后,根据此值,我想显示提醒。 我的问题是在获取后该值未定义。
这是我的代码。
onLogin(){
var a;
fetch('http://xxxxx/user/login', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
username: this.username,
password: this.password
})
})
.then(function(response){
if (response.status === 404){
response.text().then(function(object){
var a = "NO";
})
} else if (response.status === 200){
response.text().then(function(object){
var a = "OK";
})}
})
if (a == "OK"){
Alert.alert(
'Acceso',
'a',
[{
text: 'Aceptar',
onPress: (this.aceptar.bind(this))
},
{
text: 'Cancelar',
onPress: (this.cancelar.bind(this))
}]
)}
else if (a == "NO"{
//something
}
}
答案 0 :(得分:2)
你有两个问题。
a
(删除var
函数中的关键字.then()
会将其声明为函数级别。fetch
是异步的,因此无法保证在您调用其值时定义a
。完成您所需要的更好的方法是将回调函数传递到onLogin
函数(并绕过var a
开头的需要。
示例:
onLogin(callback) {
fetch('http://xxxxx/user/login', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
username: this.username,
password: this.password
})
})
.then(function(response) {
var successful = true;
if (response.status === 200) {
callback(successful);
} else {
callback(!successful);
}
});
};
onLogin(function (successful) { // call the onLogin and pass in a function as a callback
if (successful){
Alert.alert(
'Acceso',
'a',
[{
text: 'Aceptar',
onPress: (this.aceptar.bind(this))
},
{
text: 'Cancelar',
onPress: (this.cancelar.bind(this))
}]
);
} else {
// not successful, do something else
}
});
答案 1 :(得分:0)
在为a分配值时,您基本上是重新声明它而不是分配值。 删除then()中的var关键字,它应该可以工作。
答案 2 :(得分:0)
您正在重新声明变量a
onLogin(){
var a; **Here you have declared the variable**
fetch('http://xxxxx/user/login', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
username: this.username,
password: this.password
})
})
.then(function(response){
if (response.status === 404){
response.text().then(function(object){
//Here you are redeclaring it. just remove var
a = "NO";
})
} else if (response.status === 200){
response.text().then(function(object){
//Here too
a = "OK";
})}
})
if (a == "OK"){
Alert.alert(
'Acceso',
'a',
[{
text: 'Aceptar',
onPress: (this.aceptar.bind(this))
},
{
text: 'Cancelar',
onPress: (this.cancelar.bind(this))
}]
)}
else if (a == "NO"{
//something
}
}