我想知道实现一个函数的最佳方法是什么,它将负责在某些请求上切换gif。我不想在所有的http请求中显示它,因此我不想将它放在拦截器中 - 我想创建一个服务。
我很可能会使用一个功能如下:
LoaderFunction(SomeFunction())
无论何时启动和解决承诺,都会切换img或其他内容。 SomeFunction()
通常是http请求,它们已经有了自己的承诺。
谢谢!
答案 0 :(得分:1)
最简单的方法是使用计数信号量和the disposer pattern。它适用于任何数量的持续请求。
4.5.2
这将范围绑定到事件的生命周期 - 就像C ++中的RAII一样。这样就可以了:
withLoader.count = 0;
function withLoader(fn){
if(count === 0) initiateLoader();
count++;
return $q.when(fn).finally(function(){
count--;
if(count === 0) finishLoader();
});
}
当计数器达到0时,加载程序将完成,即所有请求完成时。
因为它是Angular,你可能想把withLoader(someFunction);
withLoader(someFunction);
withLoader(function(){
return $http.post(...);
}).then(function(){
// http request finished, like your normal `then` callback
});
放在自己的服务中,并有一个指令管理加载本身。
答案 1 :(得分:0)
嗯,最简单的方式是通过$http
调用自己来使用承诺。
示例:强>
$http.post("/", data, function() {
initiateLoader(); // this is a function that starts the loading animation.
}).success(function (data) {
finishLoader(); // this is a function that ends the loading animation.
}).catch(function(err) {
finishLoader(); //so the loader also finishes on errors.
});