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

标签 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.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 的正确语法相反。

有没有办法等待所有下载完成再回调?

我确实看过How to execute a Javascript function only after multiple other functions have completed? ,因为问题是完全相同的(funcA()、funcB() 和完成后的 funcC()),但在我的例子中,funcA() 和 funcB() 可以在我需要之前启动十到二十次执行 funcC()。

我正在尝试修改另一个问题的答案代码来做我需要的,但是有人知道更简单的方法吗?

最佳答案

看看 Async Github 图书馆。它可以在node js和浏览器中使用。 您需要 async.parallelasync.series

关于javascript - 如何在启动 funcC() 之前执行未定义数量的 funcA() 和 funcB()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17965597/

相关文章:

javascript - 从服务器获取所有画面工作簿

javascript - 如何暂时用新的 rl.qu/estion 覆盖之前的 rl.qu/estion?

c# - Powershell C#异步执行

javascript - Backbone 延伸断裂

javascript - 从数字文字访问 "getter"的属性时,IE9 中出现奇怪的 `Number.prototype` 行为

node.js - 使用无服务器框架上传时文件在 S3 上损坏

javascript - 如何使用地理编码器获取地理定位并使用 promise 保存数据?

wcf - 我陷入僵局了吗?为什么?

ios - swift 数组 : how to append element references in order to update element later on from a synch request?

javascript - Nativescript 传数据查看