Javascript 如何创建返回使用$http获取的值的函数

Javascript 如何创建返回使用$http获取的值的函数,javascript,angularjs,angular-http,Javascript,Angularjs,Angular Http,我的代码是: $rootScope.getResource = function(id) { $http.get( "path/of/resource/" + id ) .success(function (data, status, header, config) { return data; }) .error(function (data, status, header, config) { console.log("Error"); });

我的代码是:

$rootScope.getResource = function(id) {
  $http.get( "path/of/resource/" + id )
    .success(function (data, status, header, config) {
    return data;
  })
    .error(function (data, status, header, config) {
    console.log("Error");
  });
但它总是返回“undefined”


我知道问题是$http函数是异步的,我应该使用Promissions,但我不知道如何在$rootScope中的函数内完成所有操作。

您应该使用回调返回数据

$rootScope.getResource = function(id, callback) {

  var cb = callback || angular.noop;

  $http.get( "path/of/resource/" + id )
    .success(function (data, status, header, config) {
    return cb(data);
  })
    .error(function (data, status, header, config) {
    console.log("Error");
    return cb('error');
  });
然后,使用更新的
getResource
函数

$scope.assignReturnedData = $rootScope.getResource(15, function(data) {
    $scope.yourVariable = data;
});
你可以从这项工作中得到灵感


一方面,我不鼓励您使用
$rootScope
来获取数据,相反,您应该研究如何使用。

您能否详细说明您的问题返回承诺:
返回$http.get(“path/of/resource/”+id)。阅读为什么要将getResource附加到$rootScope?你应该使用工厂。可能的重复是反模式。相反,OP应该回报承诺。这将允许调用者在成功的情况下做它想做的任何事情,在出错的情况下做它想做的任何事情
return$http.get(“path/of/resource/”+id)
就是您所需要的。如果您确实想在发生错误时登录,那么使用
返回$http.get(“path/of/resource/”+id).catch(函数(r){console.log('error');返回$q.reject(r);})