Javascript函数未在AngularApp

时间:2015-05-19 02:38:27

标签: javascript mysql angularjs node.js express

首先,抱歉英语不好。 好吧,在这种情况下的问题是一个函数:'刷新',查询响应并从mysql中的数据库返回值,但当我尝试获取响应并返回到另一个函数时,显示“未定义”值..这里是代码:

function refresh(query){
    var res;
    $http.get('/quaestioJS/'+query).
    success(function(data, status, headers, config) {
        console.log(data);  //HERE, THE INFO IS SHOWING CORRECTLY
        res = data;         //HERE 'res' IS NOT GRABBING THE VALUE OF 'data'
    }).
    error(function(data, status, headers, config) {
        console.log("Error.");
        console.log(data);
    });
    console.log(res);
    return res;
}

更新V1.0

更新的代码:

function refresh(query){
    $http.get('/quaestioJS/'+query).
    success(function(data, status, headers, config) {
        return data;
    }).
    error(function(data, status, headers, config) {
        console.log("Error.");
        console.log(data);
    });
}

这里显示了代码中的变量和函数......响应是相同的:undefined

function find(tabla){
    var x = refresh("SELECT * FROM "+tabla);
    console.log(x);
    $scope.limpiar();
}

2 个答案:

答案 0 :(得分:0)

$ http.get的原因是async。因此,您正在正确设置res变量,但是当您是控制台日志记录res时,它会在返回数据之前发生。所以正确的修改是:

function refresh(query, callback){
    var res;
    $http.get('/quaestioJS/'+query).
    success(function(data, status, headers, config) {
        console.log(data); 
        res = data;
        callback(res);
    }).
    error(function(data, status, headers, config) {
        console.log("Error.");
        console.log(data);
    });

}

function find(tabla){
    var x = refresh("SELECT * FROM "+tabla, function(data){
        console.log(data); 
        $scope.limpiar();
    });

}

编辑:抱歉,我的第一次尝试是一个错误,完全忘记了返回只会返回成功函数。

答案 1 :(得分:0)

这是callbacks的概念出现的时候。为了获取响应,您必须传递一个函数/回调/响应处理程序,它将为您提供操作响应的控件。

您在当前实现中未定义的原因是因为调用的函数的执行在HTTP调用的响应出现之前完成。在这种情况下,返回的值将是未定义的。

因此,您可以通过传递响应处理程序来获取响应,如下所示:

    function find(tabla){
        refresh("SELECT * FROM "+tabla, function(data, status, headers, config) {
            console.log(data);
            $scope.limpiar();
        });
    }


    function refresh(query, handler) {
        $http.get('/quaestioJS/'+query).
        success(handler).
        error(function(data, status, headers, config) {
            console.log("Error.");
            console.log(data);
        });
    }