javascript - 等待 Angular JS 工厂请求获得响应

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

我在 Rails 应用程序中使用 Angular,下面是发出 api 请求并执行 .run 中的代码的代码片段。有时 api 响应仍处于待处理状态,而代码会被执行。这会导致指令无法按预期正确加载。 for 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 可以解决这个问题,但无法找出方法。如果我方需要任何其他输入,请告诉我。

最佳答案

ApiDataCall 需要返回 Angular promise 。然后你可以这样做:

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"}

关于javascript - 等待 Angular JS 工厂请求获得响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36077218/

相关文章:

javascript - 使用 gulp-rev 后如何将修订后的文件包含到 .html 中?

javascript - 如何从外部调用 Angularjs 工厂函数

javascript - 在谷歌地图 v3 多边形上检测鼠标事件的 shiftKey

javascript - 从 youtube 向 yt.player 对象添加额外参数

javascript - 渲染所有可能的元素或根据要求渲染

ruby-on-rails - Rails 4 — 如何从 JSON API 填充用户模型?

ruby-on-rails - 如何使 Rails 片段缓存超时?

ruby-on-rails - 如何停止 heroku db 进程

javascript - 从 AngularJS 中的指令添加指令

javascript - .load() 后回调函数不执行点击