zoukankan      html  css  js  c++  java
  • node模块async

    async模块是为了解决异步回调大坑而存在的,尤其是在用了mysql模块的时候,简直要命啊,

    虽然现在又es6的

    Promise      Generator     Async(es7)

    但是对于还不怎么用es6的人,简直是神器.

    npm 安装好async模块,

    然后引入就可以使用 var async = require('async');

    他有几种模式

    1.waterfall(tasks,[callback]) :瀑布流,个人用最多,最重要的一个

     

     

    依次执行,前一个函数的输出为后一个函数的输入

    如果中途出现错误,后面的函数将不在执行,之前执行的结果和错误信息将直接传到最终的回调函数

    const express =require('express');
    const bodyParser =   require('body-parser');
    const mysql = require('mysql');
    const async =require('async');
    
    const db = mysql.createPool({host:'localhost',user:'root',password:'123456',database:'test'});
    
    var server = express();
    server.listen(8090);
    server.use(bodyParser.urlencoded({extended: false}));
    server.use(bodyParser.json());
    
    server.post('/',(req,res)=>{
       
    
        var qingqiu = function(callback){
            db.query(`SELECT * FROM user_table WHERE user_ID= "${req.body.user_ID}"`,(err,data)=>{
                if(err){
                    console.log(err);
                    res.status(500).send('database error').end();
                }
                else{
    
                    callback(null, data);    //callback(错误信息,传递的数据)
    
                }
    
            })
        }
        
        //q为接收的数据
        var qingqiu2 = function(q,callback){
            console.log(q[0].user_ID);
            db.query(`SELECT count FROM user_table WHERE user_ID= "${q[0].user_ID}"`,(err,data)=>{
                if(err){
                    console.log(err);
                    res.status(500).send('database error').end();
                }
                else{
                    console.log(data);
                    callback(null, data[0]);
                }
    
            })
        }
        
        //执行
        async.waterfall([qingqiu,qingqiu2],function(err,result){
            if (err) {
                console.log(err);
            }
        })
    
    
    });
    

      

     

    2. series(tasks,[callback])

    多个函数从上到下依次执行,相互之间没有数据交互,

    如果中途发生错误,则将错误传递到回调函数,并停止执行后面的函数

     

    3.parallel(tasks,[callback])

     

    多个函数并行执行,不会等待其他函数

    如果中途出错,则立即将err和值传到最终的回调函数,其他未执行完毕的函数将不再执行,但是要占一个位置

     

    4.parallelLimit(tasks,limit,[callback]) 

     

    和parallel类似,只是limit参数限制了同时并发执行的个数,不再是无限并发

     

    5.auto(tasks,[callback]) 

     

    多个函数有数据交互,有的并行,有的依次执行

     

    6.whilst(test,fn,[callback]) 

    相当于while循环,fn函数里不管是同步还是异步都会执行完上一次循环才会执行下一次循环,对异步循环很有帮助,

    test是条件,为true时执行fn里的方法

     

    7.doWhilst

    和whilst类似,和do-while一个意思,首先执行一次fn,再判断,和whilst相比它把fn和test位置交换了而已.

    until和whilst相反,当test判断为false的时候执行fn里的方法,为true时跳出,

     

    doUntil与doWhilst相反.

     

    8.forever(fn,errback)

     

    forever就是无限循环了.只有当中途出现错误的时候才会停止

     

    9.compose(fn1,fn2,fn3...)

     

    这个方法会创建一个异步的集合函数,执行的顺序是倒序.前一个fn的输出是后一个fn的输入.有数据交互

     

    [0]
  • 相关阅读:
    消息中间件——RabbitMQ(六)理解Exchange交换机核心概念!
    消息中间件——RabbitMQ(五)快速入门生产者与消费者,SpringBoot整合RabbitMQ!
    消息中间件——RabbitMQ(四)命令行与管控台的基本操作!
    消息中间件——RabbitMQ(三)理解RabbitMQ核心概念和AMQP协议!
    LayUI的基本使用
    Git报错:Your branch is up to date with 'origin/master'.
    Git报错:Please tell me who you are.
    Git报错:Permission denied (publickey)
    在 windows 上安装 git 2.22
    在 windows 上安装 git 2.15
  • 原文地址:https://www.cnblogs.com/grhino/p/8969095.html
Copyright © 2011-2022 走看看