Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 节点JS无法从返回数据。成功_Javascript_Node.js_Return - Fatal编程技术网

Javascript 节点JS无法从返回数据。成功

Javascript 节点JS无法从返回数据。成功,javascript,node.js,return,Javascript,Node.js,Return,我试图从SQL数据库检索数据,并编写了以下函数: $scope.sqlRequest = function (Req) { console.log("Main.js requesting from DB :", Req) return server_operations.sqlRequest([Req]) .success(function (Results) { console.log("R

我试图从SQL数据库检索数据,并编写了以下函数:

$scope.sqlRequest = function (Req) {
            console.log("Main.js requesting from DB :", Req)
            return server_operations.sqlRequest([Req])
            .success(function (Results) {
                console.log("Results returned to .success = ", Results);
                return Results.data
            });
        }
当我运行该函数时,结果会正确显示在控制台中。 但当我尝试在任何进一步的上下文中使用数据时,例如:

Res = $scope.sqlRequest("<Some SQL String here>")
Res=$scope.sqlRequest(“”)
变量Res总是未定义的。
要将数据转换为全局变量,我需要做哪些更改?

您需要使用回调函数中返回的响应,因为它是异步的<代码>var myVar=myAsycnFunction()将始终是未定义的,因为在评估数据库调用时不会返回任何响应。相反,试试看

.success(function( results ){
    processResults( results );
});
其中,
processResults()
是一个具有逻辑的函数,用于处理您想要对结果执行的任何操作

编辑以澄清:如果您只想使用一个函数来处理结果,您可以在success函数中调用它,传递结果数据。如果希望更灵活,可以传入回调函数以在success函数中调用,并传入结果数据,如下例所示

$scope.sqlRequest=函数(请求,回调){
服务器操作.sqlRequest(req)
.成功(功能){
//调用我们传入的回调函数来处理请求的结果
回调(res.data);
});
}
函数processData(数据){
//我对数据做了些什么
}
//调用数据fn并传入回调以处理结果

$scope.sqlRequest(req,processData)
您是在success回调上打印
Res
的值,还是在整个函数外部打印?
.success
还是应该是
.success
(两个c)?我想在下拉菜单中显示Res的内容,这意味着调用函数的HTML文件必须可以访问数据,但是Res总是未定义的。首先将$q注入控制器,然后使用它创建$scope.sqlRequest=function(Req){var deferred=$q.defer();console.log(“Main.js从DB请求:,Req”)server_operations.sqlRequest([Req]).success(函数(结果){console.log(“Results returned to.success=,Results”);deferred.resolve(Results.data);}).error(函数(消息,状态){deferred.reject(消息,状态);});return deferred.promise;};调用$scope.sqlRequest()$scope.sqlRequest(“”)。然后(函数(数据){Res=data;});问题是,我有几个函数,它们将调用这个请求函数,我想对数据做什么取决于调用请求的函数。这意味着processResults函数首先必须知道哪个函数调用了请求函数。这对我来说似乎不可行。您可以指定在调用原始函数
function(sql,callback){//code}.success(function(results,callback){callback(results)})时要用作回调的函数即,调用传入的任何回调函数,并将得到的结果作为参数。这是一种非常常见的模式。好的,我现在通过使用回调解决了这个问题,它现在看起来是这样的:$scope.sqlRequest=function(Req,callback){console.log(“Main.js从DB请求:”,Req)server_operations.sqlRequest([Req]).success(function(Results){console.log(“Results returned to Main.js=,Results.rows”);callback(Results);};}@EnteFetz听起来不错:)不知道我为什么会被否决,但我很高兴你现在取得了进展。@sautimo我不明白你第一个答案想说什么,特别是因为你在原始答案中提供的代码没有澄清“processResults”是一个函数,必须作为参数提供给异步函数。我锁定的是这样的东西,并解释了它是如何工作的:sqlRequest=function(Req,callbackfunction){server_operations.sqlRequest(Req).success(function(results){callbackfunction(results);}}如果您对原始答案进行了类似的扩展,那么我可以将其标记为已接受;)