Javascript 如何知道一组异步函数是否已完成执行?
我的新闻网站提供3种类型的内容:文章、视频和推文。我根据接收到的参数加载这些内容类型中的一个或全部。因此:Javascript 如何知道一组异步函数是否已完成执行?,javascript,angularjs,asynchronous,Javascript,Angularjs,Asynchronous,我的新闻网站提供3种类型的内容:文章、视频和推文。我根据接收到的参数加载这些内容类型中的一个或全部。因此: switch(param){ case 'articles': loadArticles(); break; case 'videos': loadVideos(); break; case 'tweets': loadTweets(); break; default: loadArticles(); loadVideos(); loadTweets();
switch(param){
case 'articles': loadArticles(); break;
case 'videos': loadVideos(); break;
case 'tweets': loadTweets(); break;
default: loadArticles(); loadVideos(); loadTweets(); break;
}
我使用的是给用户一种进步的错觉。如何在loadArticles()、loadVideos()和loadTweets()中设置进度值以模拟进度
编辑:每个函数都有各自的工厂调用(每个函数都有自己的
$http.get()
)。例如:articleFactory.getArticles().then(函数(数据){$scope.articles=data;})
如何将进度引用作为参数传递给这些函数,以便它们可以更新它
case 'articles': loadArticles(progress); break;
function loadArticles(progress) {
...
progress.add(0.15); //Or whatever you do to increment
}
这是你的选择吗
switch(param){
case 'articles':NProgress.start(); loadArticles(); NProgress.done() ; break;
case 'videos': NProgress.start(); loadVideos(); NProgress.done() ; break;
case 'tweets':NProgress.start(); loadTweets(); NProgress.done() ; break;
default: NProgress.start(); loadArticles(); loadVideos(); loadTweets(); NProgress.done() ;break;
}
您必须在loadArticles()loadVideos()和loadTweets()中使用NProgress.set(somevalue)将这些调用转化为您可以延迟的承诺,然后使用
$q.all()
等待它们全部完成。下面是一个非常简单的示例,您需要稍微修改一下代码
angular.module('app',[]).controller('testCtrl',['$scope','$timeout','$q',',
函数($scope、$timeout、$q){
var thenFn=函数(值){
console.log('resolved',值);
返回值;
},
q1=$scope.q1=$q.defer(),
q2=$scope.q2=$q.defer(),
p1=$scope.q1.promise,
p2=范围为$scope.q2.promise;
//NProgress.start();
$scope.testValue=$q.all([
p1.然后(然后fn),
p2.然后(然后fn)
])
.然后(函数(值){
console.log(“所有承诺已解决”,值);
//NProgress.complete();
});
$timeout(函数(){
console.log(“解决延迟承诺1”);
q1.决议(1);
}, 1000);
$timeout(函数(){
console.log(“解决延迟承诺2”);
问题2.决议(2);
}, 2000);
}]);代码>
JS-Bin
要检查它们是否都完成了,您可以使用。要检查它们的进度,请使用“延迟”notify
。您可能认为加载函数中没有异步调用。我的错;编辑了这个问题。我想到了这个。但我需要打电话给某个地方的NProgress.done()。