Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.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对象/变量问题_Javascript_Angularjs - Fatal编程技术网

javascript对象/变量问题

javascript对象/变量问题,javascript,angularjs,Javascript,Angularjs,我有以下代码在角度服务 this.get = function(url,qParams) { var webresponse = new Object(); $http.get(url+qParams) .success(function(result){ webresponse.data = result; webresponse.state = 1; }) .error(function(resul

我有以下代码在角度服务

this.get = function(url,qParams)
{
    var webresponse = new Object();

    $http.get(url+qParams)
    .success(function(result){
        webresponse.data = result;
        webresponse.state = 1;          
    })
    .error(function(result){
        webresponse.data = result;
        webresponse.state = 0;      
    });

    console.log('webresponse :' + webresponse.data);
    return webresponse;
}
在控制台中,日志显示
webresponse.data
undefined
。请帮助我了解原因。是范围问题吗


只想让您知道,
结果
是JSON数组,在控制台日志中,它显示了预期的JSON数组以及其中的所有元素。

您的
$http.get()
是一个
异步
调用,您的
控制台.log
是同步方式,因此,
console.log
首先启动,然后您的
$http

函数是一个同步调用

this.get = function(url,qParams)
{
    var webresponse = new Object();

    $http.get(url+qParams)
    .success(function(result){
        webresponse.data = result;
        webresponse.state = 1;          

        console.log('webresponse :' + webresponse.data);
        //triger any function @here when its success 
    })
    .error(function(result){
        webresponse.data = result;
        webresponse.state = 0;   


        console.log('webresponse :' + webresponse.data);
        //triger any function @here when its fail 

    });    
}

$http
中的方法调用是异步的:函数
.get()
返回后,结果不一定可用。请再次检查文档中的
$http

只有当
$http.get
请求从服务器获取数据时,
webresponse
中的数据才可用(即,您的变量尚未设置为普通对象以外的任何对象)。这样的时刻是
.success
触发器、
.error
触发器,还有一个名为
的触发器,您没有使用(或者可能不需要使用)。最后是
(无论是否触发了
.success
error
),它都会起作用

您无法访问这些回调之外的webresponse,因为只有这些回调才有保证提供这些值。甚至更多!您不能从函数返回这样的值。由于行为是异步的,因此必须以相同的异步方式返回某些内容。请检查
$q
服务以了解如何操作。这是一个很长的话题,你缺乏这个话题的基本知识,因此我将给你一些指导:

  • $http
    是一种异步服务。它们的调用(例如,
    .get()
    返回一个称为承诺的东西。您的函数应该返回一个承诺(相同或其他)
  • 实际结果本身(即您想要的结果)将无法按您的意愿使用:函数的调用程序必须参与您返回的承诺,为其指定回调,并在回调中参与
  • 更多信息:您需要对
    $http
    $q
    服务有更深入的了解。它们在官方文档中有很好的文档记录
  • 您的
    this.get()
    函数无法立即返回结果

    正如您所知,$http模块使用ajax(ajax:异步Javascript和Xml)

    因此,您必须等待
    成功
    错误
    回调函数中的异步响应


    如果您想返回响应,请考虑<代码>承诺> /代码>模式。

    您应该安慰。登录成功FNTITY是异步调用,函数<代码> GET()
    不要等到结果出来后才去感谢对这个问题的清晰而简洁的解释。请欣赏。@MarcoBonelli sync fashion意味着我们通常都习惯于它(将它放在一个更轻松的地方)在编程中意味着逐行执行和等待,另一方面,
    async
    不要等待结果,尽管通常在事件周期上维护。感谢$http promise在角度上的同步/异步差异。可能在中知道它,但仍然错过了它。这就是当你每天工作14小时时会发生的情况…!!:)@SherebyahTishbi您的阻塞代码正在破坏您的同步生命周期:)啊……我是多么地错过了在angular中的整个方面
    promise
    。非常感谢你的朋友。