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
。非常感谢你的朋友。