我在 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/