如何在启动funcC()之前执行未定义数目的funcA()和funcB()?
我有一个应用程序在JavaScript中编写。 为了工作,我需要下载一堆文件。 由于我可以有很多文件可以很长,我做了下载asynchronous:
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); }
我的问题是:下载有一个callback,但因为可以有5个smil和30个video,我怎么能确保所有的下载将在download_all的callback被调用之前?
我每次完成下载(在callback)之后递增一个variables,等等
while(smildlcompleted<xml.smil.length && videodlcompleted<xml.video.length) { sleep(1000); }
就像我在C中所做的一样,但是我找不到睡眠函数,它似乎与js / node.js的粗体语法相反。
有没有办法在callback之前等待所有下载完成?
我看过如何在多个其他函数完成后才执行Javascript函数? ,因为问题是相当相同的(funcA(),funcB(),当所有完成funcC()),但在我的情况下,funcA()和funcB()可以启动十到二十次之前,我需要做funcC()。
我试图修改其他问题的答案代码做我所需要的,但有人知道任何更简单的方法?
看看Async Github库。 它可以在节点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; } }
- asynchronous非阻塞事件驱动方法是“asynchronous编程”的唯一方法吗?
- 快速error handling和asynchronous等待
- 困惑于如何在node.js中实现asynchronouscallback
- asynchronousnode.js代码(使用Q)不写入标准错误
- async.times函数不会触发callback
- 如何处理nodejs EMFILEexception而不修改ulimit?
- Node.js:发送多个AJAX请求来开始后台作业队列
- 事件循环阻塞和节点JS中的asynchronous编程
- 将asynchronous工作stream更改为Promise(Bluebird)