【问题标题】:Wait for angular js factory request to get response等待 Angular js 工厂请求得到响应
【发布时间】:2016-07-04 18:50:20
【问题描述】:

我在我的 Rails 应用程序中使用 Angular,下面是发出 api 请求并执行 .run 中的代码的代码 sn-p。有时 api 响应仍处于挂起状态并且代码已执行。这会导致指令无法按预期正确加载。对于 ex- ng-if 依赖于一些数据来加载东西,但因为数据不可用。它错过了显示消息。

}).factory('ApiDataCall', function ($resource) {
  return $resource('api_data/check_errors');

}).run(function ($rootScope, $timeout, $navigationWarning,$window, ApiDataCall) {

  ApiDataCall.get(function (data) {
    $rootScope.require_redirect = data;
  });

我想知道如何延迟确认请求已完成。我发现 $q.defer() 和 promise 可以解决这个问题,但无法弄清楚方法。如果我需要任何其他输入,请告诉我。

【问题讨论】:

    标签: javascript ruby-on-rails angularjs angularjs-directive


    【解决方案1】:

    ApiDataCall 需要返回一个 Angular 承诺。然后您可以执行以下操作:

    ApiDataCall.get(function (data) {
        $rootScope.require_redirect = data;
        }).then(function success(response) {
            //Do something here that requires ApiDataCall.get() to complete 
        }, function failure(response) {
           //Do something here if the call fails.
        }
    );
    

    实现 Promise 的一种简单方法是使用 $q。例如 有 ApiDataCall.get 返回:

    return $q.when({foo: "bar"});
    

    为了成功。和:

    return $q.reject();
    

    失败

    允许传递给 then() 中相应函数的响应对象为 {foo: "bar"}

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-24
      • 2015-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-10
      相关资源
      最近更新 更多