如何在启动funcC()之前执行未定义数量的funcA()和funcB()
How to execute a undefined number of funcA() and funcB() before starting funcC()?
我有一个用javascript编写的应用程序。为了工作,我需要下载一堆文件。由于我有很多文件可能很长,所以我进行了异步下载:
function download_all(xml, callback){
var i=0;
while(i<xml.smil.length)
{
download(xml.smil[i]);
i=i+1;
}
i=0;
while(i<xml.video.length)
{
download(xml.video[i]);
i=i+1;
}
callback(xml);
}
我的问题是:下载确实有回调,但由于可以有5个smil和30个视频,我如何确保在调用download_all的回调之前完成所有下载?
我想过在每次完整下载后(在回调中)增加一个变量,比如
while(smildlcompleted<xml.smil.length && videodlcompleted<xml.video.length)
{
sleep(1000);
}
就像我在C中所做的那样,但我找不到睡眠函数,而且它似乎与js/node.js的正确语法相反。
有没有办法在回调之前等待所有下载完成?
我确实看过如何在多个其他函数完成后才执行Javascript函数?,因为问题是完全一样的(funcA(),funcB(),完成后,funcC()),但在我的情况下,在我需要执行funcC之前,funcA和funcB可以启动十到二十次。
我正试图修改另一个问题的答案代码以满足我的需要,但有人知道更简单的方法吗?
看看Async Github库。它既可以在node js中使用,也可以在浏览器中使用。您需要async.parallel
或async.series
。
试试这个代码。
function download_all(xml, callback){
var i=0 , no_of_downloads , downloadsCompleted;
no_of_downloads = xml.smil.length + xml.video.length;
downloadsCompleted = 0;
function afterDownload(){
downloadsCompleted + =1;
if(downloadsCompleted ===no_of_downloads ) { // all downloads are completed
callback(); //call the callback here
}
}
while(i<xml.smil.length)
{
download(xml.smil[i],afterDownload);
i=i+1;
}
i=0;
while(i<xml.video.length)
{
download(xml.video[i],afterDownload);
i=i+1;
}
}