Javascript函数返回未定义

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

我有一个AngularJS项目,有一个get请求被发送到后端,就像这样,它将返回数据,使用这个函数是因为对同一url的get请求被多次发送

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)
});