Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何知道一组异步函数是否已完成执行?_Javascript_Angularjs_Asynchronous - Fatal编程技术网

Javascript 如何知道一组异步函数是否已完成执行?

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();

我的新闻网站提供3种类型的内容:文章、视频和推文。我根据接收到的参数加载这些内容类型中的一个或全部。因此:

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()。