获取fetch

时间:2017-10-30 17:50:19

标签: javascript reactjs

我有一个登录功能,我希望根据登录成功或错误显示警报。首先,我声明变量,然后根据结果进行取值,我给变量赋值。

完成提取后,根据此值,我想显示提醒。 我的问题是在获取后该值未定义。

这是我的代码。

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

        }

        }

3 个答案:

答案 0 :(得分:2)

你有两个问题。

  1. 您重新声明变量a(删除var函数中的关键字.then()会将其声明为函数级别。
  2. fetch是异步的,因此无法保证在您调用其值时定义a
  3. 完成您所需要的更好的方法是将回调函数传递到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

    }

    }