Javascript函数返回未定义
我有一个AngularJS项目,有一个get请求被发送到后端,就像这样,它将返回数据,使用这个函数是因为对同一url的get请求被多次发送Javascript函数返回未定义,javascript,jquery,angularjs,Javascript,Jquery,Angularjs,我有一个AngularJS项目,有一个get请求被发送到后端,就像这样,它将返回数据,使用这个函数是因为对同一url的get请求被多次发送 function getfunction(some input data) { $http.get('requset URL' , { params : {some parameters}) .success(function(data){ return data; }); } var output = getfunc
function getfunction(some input data) {
$http.get('requset URL' , { params : {some parameters})
.success(function(data){
return data;
});
}
var output = getfunction(input data to the function);
但是,输出总是未定义的。我如何修复它,使输出具有从上述get请求返回的值。$http返回一个承诺。您的数据将异步到达
function getfunction(some input data) {
return $http.get('requset URL' , { params : {some parameters});
}
var output;
getfunction(input data to the function).then(function(data){
output = data;
}, function(){
// Handle errors.
});
$http.get
使用。或者换句话说:它异步执行请求
您可以返回$http.get
本身返回的内容—承诺—并使用添加一个延续,然后使用:
function getfunction(some input data) {
return $http.get('requset URL' , { params : {some parameters});
}
getfunction(input data to the function).then(function(data) {
});
// or .success
getfunction(input data to the function).success(function(data) {
});
调用是异步的,因此您正在调用的函数将首先运行,然后在从get请求返回响应时运行成功回调。成功处理程序应该是在此场景中处理输出的处理程序(例如,在文本框中显示返回值)$http return$promise。因此,您可以使用$q服务:
function getfunction(some input data) {
var deferred = $q.defer();
$http.get('requset URL' , { params : {some parameters})
.success(function(data){
deferred.resolve(data)
});
return deferred.promise;
}
var output = getfunction(input data to the function).then(function(data){
output = data;
}, function(err){
console.log(err)
});
或
您应该从函数返回承诺:return$http.get(…)代码>。我不是angularjs开发人员,但这就是它看起来的样子,对吧?!啊,对。谢谢,我没有看到那部分。事实上,getFunction()
中的success()
处理程序可能是多余的。
function getfunction(some input data) {
return $http.get('requset URL' , { params : {some parameters});
}
var output;
getfunction(input data to the function).then(function(data){
output = data;
}, function(err){
console.log(err)
});