当前位置: 首页 > 工具软件 > Async > 使用案例 >

nodejs 之 async 插件 async模块 讲解

巫新知
2023-12-01

无论搞什么东西 其实都是从环境开始搭建的 

async 乍一看 像是  async 和 await 中的那个 关键字呢   

今天讲解的并不是  es7中的async  而是 nodejs 中的一个 插件 aysnc.js

不过他们有相似的点 就是  解决异步执行的问题

特别是 我们node.js 去请求第三方接口 作为 中间服务器  来使用的话

第一步当然是安装了 

npm i async --save

这里只说几种常用的哈

1. async.series

这个函数是    可以传入几个 异步执行的函数    执行顺序是 串联的 依次 执行    

最终 消耗的事件是    异步全部执行完成 后  所消耗的事件 

下面的这个例子   用时间  是 2000 + 1000 +3000  至少大于 6000 毫秒

async.series([],callback) ;  第一个参数 可以是 数组  类型 也可以是 对象类型  

区别是最终的输出结果的格式    取决于你第一个参数 传入的格式

const async = require('async');
// 从上到下  依次执行   
function task1(callback) {
    setTimeout(() => {
        callback(null, "1111")
    }, 2000);
}
function task2(callback) {
    setTimeout(() => {
        callback(null, "222")
    }, 1000);
}
function task3(callback) {
    setTimeout(() => {
        callback(null, "333")
    }, 3000);
}
// 上面执行顺序  顺序执行  执行总时间是所有的时间之和   最后再执行下面的回调函数
async.series({task1, task2, task3}, function(err, results) {
    if(err) {
        console.log(err);
        return;
    }
    console.log('series ---------',results);
})

2 . async.parallel      并行执行   

几个函数并行执行      这个执行的事件就取决于  消耗事件最长的那个 函数了

// 上面执行顺序 并行执行  执行时间取决于最长的那个时间  最后执行下面的回调函数
async.parallel([task1, task2, task3], function(err, results) {
    if(err) {
        console.log(err);
        return;
    }
    console.log('parallel -----------', results);
})

3. async.waterFall

瀑布流   下一个函数的执行依赖于 上一个函数的 执行解决

打个比方就好像是   我们前端 发送的ajax请求      a 请求  b 请求     b请求发送的参数需要 a请求成功之后  才能获取到        也就是说 b 请求 依赖于 a请求

// 瀑布流  后来执行的函数依赖上一个函数执行的结果  
var task4 = function(callback) {
    setTimeout(() => {
        callback(null, '444')
    }, 1000);
}

var task5 = function(q,callback) {
    console.log('task4传入的值是'+q);
    callback(null, '555')
}

var task6 = function(q,callback) {
    console.log('task5传入的值是'+q);
    callback(null, '666')
}
async.waterfall([task4, task5, task6], function(err, data) {
    if(err) {
        console.log(err);
        return ;
    }
    console.log(data)
})

还有一个 async.auto   也比较常用

不过这个之前我已经有比较详细的讲解  这个就不一一赘述了 

 

 

关注我 持续更新前端知识    

 类似资料: