Javascript函数未在AngularApp中返回值

Javascript函数未在AngularApp中返回值,javascript,mysql,angularjs,node.js,express,Javascript,Mysql,Angularjs,Node.js,Express,首先,对不起,我英语不好。 这个例子中的问题是一个函数:“refresh”,查询响应并返回mysql中数据库中的值,但是当我尝试获取响应并返回到另一个函数时,会显示一个“未定义”的值。。代码如下: function refresh(query){ var res; $http.get('/quaestioJS/'+query). success(function(data, status, headers, config) { console.log(da

首先,对不起,我英语不好。 这个例子中的问题是一个函数:“refresh”,查询响应并返回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);
    });
}
这里显示的是代码中的变量和函数。。。响应是相同的:未定义

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

原因是$http.get是异步工作的。因此,您正确设置了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();
    });

}

编辑:很抱歉,我的第一次尝试是一个错误,完全忘记了return只能从success函数中返回。

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

当前实现中未定义的原因是,调用的函数的执行在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);
        });
    }

是的,但真正的问题是函数没有返回'data'或'res',主响应在那里,但是返回“notworking”,我的控制台显示“undefined”。。在最初的代码中,返回在函数的末尾,因为在另一篇文章中说,不能将返回放在可调用函数中,但可以从可调用函数中获取值并在函数的末尾返回D:因为返回是退出回调函数而不是外部函数。。。可以这么说。选中此项,将更新我的:很好,但同样的,如果我尝试从处理程序获取响应并返回数据,则始终是“未定义”。。。我想我将使用$scope变量来查看数据。您不应该从处理程序返回数据。您应该从处理程序执行所有操作,或者从处理程序调用执行这些操作的函数。这就是我在响应处理程序中移动$scope.limpiar()的原因