异步函数的并行流程

为了让异步任务并行执行,需要将异步函数放入数组中,任务的存放顺序无关紧要.
每个任务都应该调用处理器累积已完成的计数值.

q.png
const fs = require('fs')

let completeTasks = 0 //统计完整的异步函数计数器

let tasks = [] //要执行的异步函数

let wordCounts = {} //存储每一个异步函数的读取结果

let fileDir = './text' //目标目录

//检查是否所有并行异步函数执行完成
function checkIfComplete(){
    completeTasks++
    if(completeTasks == tasks.length){//表示所有的异步函数都并行执行完了
        for(var index in wordCounts){ //循环打印出结果
           console.log(`${index} : ${wordCounts[index]}`)
        }
    }
}

function countWordsInText(text){
    let words = text.toString().toLowerCase().split(/\W+/).sort()
    for(var index in words){
        var word = words[index]
        if(word){
            wordCounts[word] = (wordCounts[word]) ? wordCounts[word] + 1 : 1
        }
    }
}

//获取目录下的文件
fs.readdir(fileDir,function(err,files){
    
    if(err) throw err

    for(let index in files){
        
        let task = function(){
            fs.readFile(`${fileDir}/${files[index]}`,(err,data)=>{
                countWordsInText(data)
                checkIfComplete()
            })
        }
        tasks.push(task)
        
    }
    for(var items in tasks){
        tasks[items]()
    }
})
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • __block和__weak修饰符的区别其实是挺明显的:1.__block不管是ARC还是MRC模式下都可以使用,...
    LZM轮回阅读 8,770评论 0 6
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,523评论 25 709
  • 1,关于亮度,据测试不到300尼特。 但是根据我个人的体验,亮度跟观感完全是两码事。 昨天太阳特别刺眼,我设置的自...
    履霜阅读 4,818评论 6 2
  • 我们在介绍产品的时候,往往喜欢把优惠活动一开始就全部说出来,以求吸引客户的注意,让客户觉得是值得购买。但这其实是不...
    淡淡流光阅读 5,426评论 0 0
  • 上班途中,一个念头就突然冒了出来:百度百科,其实就是一部区分种类进行记载的史记。 游侠张三丰的歌曲里面,有句歌词叫...
    海鲜阅读 2,812评论 0 1

友情链接更多精彩内容