Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.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 AngularJS:$routeProvider when resolve$http返回响应obj而不是我的obj_Javascript_Angularjs_Resolver_Route Provider - Fatal编程技术网

Javascript AngularJS:$routeProvider when resolve$http返回响应obj而不是我的obj

Javascript AngularJS:$routeProvider when resolve$http返回响应obj而不是我的obj,javascript,angularjs,resolver,route-provider,Javascript,Angularjs,Resolver,Route Provider,我正在尝试解决几个ajax调用,以便在控制器(以及它提供的指令)执行之前,可以获得控制器所需的数据。执行顺序正常,但是,注入控制器的结果不是返回我创建的对象,而是$http的响应对象: { config: { … }, data: { … }, headers: { … }, status: 200 } 我的代码基本上如下所示: app.config([ '$routeProvider', function($routeProvider) { $routePro

我正在尝试解决几个ajax调用,以便在控制器(以及它提供的指令)执行之前,可以获得控制器所需的数据。执行顺序正常,但是,注入控制器的结果不是返回我创建的对象,而是$http的响应对象:

{
  config: { … },
  data: { … },
  headers: { … },
  status: 200
}
我的代码基本上如下所示:

app.config([
  '$routeProvider', function($routeProvider)
  {
    $routeProvider
      .when('/path', {
        …,
        "resolve": {
          "data": [
            '$http',
            function($http)
            {
              return $http
                .get('/api/data')
                .success(function(data,status) { return data.rows[0]; })
                .error(function(data,status)   { return false; });
            }
          ]
        }
      });
  }
]);
我傻吗?$http成功的返回值不应该是$http返回的值吗

我也试过了

…
"resolve": {
  "data": [
    '$http',
    function($http)
    {
      var response;
      $http
        .get('/api/data')
        .success(function(data,status) { response = data.rows[0]; })
        .error(function(data,status)   { response = false; });
      return response;
    }
  ]
}
但是注入控制器的
数据
对象没有定义(我猜是因为$http是异步的,
resolve
没有被$http阻止,所以它在$http准备就绪之前返回)

另外,$http的同步性应该可以在其选项对象中定义

解决方案 感谢和

p.S.
then()
记录在

$http@returns{HttpPromise}返回一个{@link ng.$q promise}对象 和 标准的
then
方法和两种特定于http的方法:
success
error
然后
方法接受两个参数:success和error回调,将使用 响应对象。
success
error
方法采用一个参数,即 将在请求成功或失败时分别调用。这些论点被传递到 这些函数是传递到
然后
方法。响应对象具有以下属性:


你需要回报一个承诺。请看,社区维基的答案。我以前使用的是
$http.get(“…”).then()
(我认为这是一种
$promise
方法),但我需要
成功
错误
方法(我不想设置任意延迟/超时,只要在完成后继续,grr)。如果答案在那里,为什么不将其作为实际答案发布呢?如果文档中给出了如何使用
然后
及其回调的示例,那就太好了:/Ohh,“>
$q
's docs”promise中有一个示例,它通过successCallback的返回值errorCallback解决或拒绝(除非该值是一个承诺,在这种情况下,它将使用该承诺中使用承诺链解析的值进行解析)。“TLDR–从$q返回您想要的任何内容。然后,在上述解决方案中成功回调/errorCallback。
app.config([
  '$routeProvider', function($routeProvider)
  {
    $routeProvider
      .when('/path', {
        …,
        "resolve": {
          "data": [
            '$http',
            function($http)
            {
              return $http
                .get('/api/data')
                .then(
                  function success(response) { return response.data.rows[0]; },
                  function error(reason)     { return false; }
                );
            }
          ]
        }
      });
  }
]);