我在我的rails应用程序中使用angular,下面是代码片段,它们执行api请求并执行.run中的代码。有时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都可以解决这个问题,但无法弄清楚这个方法。如果我方需要任何其他输入,请告诉我。
答案 0 :(得分:2)
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.
}
);
实现承诺的一种简单方法是使用$ q。例如 让ApiDataCall.get返回:
return $q.when({foo: "bar"});
取得成功。和
return $q.reject();
失败
允许传递给then()中各个函数的响应对象为{foo:“bar”}