Javascript 如何在启动func()之前执行未定义数量的funcA()和funcB()?

Javascript 如何在启动func()之前执行未定义数量的funcA()和funcB()?,javascript,node.js,asynchronous,Javascript,Node.js,Asynchronous,我有一个用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.le

我有一个用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);
}
函数下载\u all(xml,回调){
var i=0;

(i查看库。它可以在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;
    }
 }
函数下载\u all(xml,回调){
var i=0,无下载,下载完成;
下载数量=xml.smil.length+xml.video.length;
下载完成=0;
函数afterDownload(){
下载完成+=1;
如果(downloadsCompleted==无下载次数){//所有下载均已完成
callback();//在此处调用回调
} 
}

虽然(我想下载是并行的还是串行的?因为有很多下载,我认为并行的更好,但我必须确保在所有下载完成后发送回调。这似乎是异步的。串行是我要找的,如果我找到如何正确使用它,但它看起来像你需要异步。并行重新审视我以前的问题。
async
是一个非常好的工具,后来我广泛使用了它。我不得不对代码的某些部分进行调整,但是这个函数工作得非常好
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;
    }
 }