Nodejs中使用异步流程控制Async

  首先,我们都知道,Node基于事件驱动的异步I/O架构,所谓异步就是非阻塞,说白了就是一个事件执行了,我不必等待它执行完成后我才能执行下一个事件。所以在Node环境中的模块基本都是异步的,上一篇说到我在项目中改用了easymysql模块代替mysql模块,两个模块作查询的操作都是异步的,所以要实现嵌套查询往往会很麻烦,而且很大可能会报错。为此,为了实现查询同步,我引进了异步流程控制async模块,让js异步操作变成同步操作,这样一方面方便阅读理解,另一方面能够很好实现需求的目标,亲测有效~

update.js文件

 1 ‘use strict‘
 2 var async = require(‘async‘);
 3 var Client = require(‘easymysql‘);
 4 var mysql = Client.create({
 5     ‘maxconnections‘: 10
 6 })
 7 mysql.addserver({
 8     host: ‘localhost‘,
 9     user: ‘test‘,
10     password: ‘123456‘,
11     database: ‘database‘
12 })
13
14 exports.match = function(req, res) {
15     //获得需要所有记录信息
16     function getInfo() {
17         return new Promise((resolve, reject) => {
18             mysql.query(‘SELECT `index`,`name` from tableA‘, function(err, result) {
19                 if (err) {
20                     console.log(err);
21                 } else {
22                     resolve(result);
23                 }
24             })
25
26         })
27     }
28
29     // 将每一项的名字更新为gdt
30     function updateName(info) {
31         return new Promise((resolve, reject) => {
32             var index = info[‘index‘];
33             var sql = "UPDATE  `tableA` SET `tableB`.`name` = ‘gdt‘ WHERE `tableA`.`index` =" + index;
34             mysql.query(sql, function(err, result) {
35                 if (err) {
36                     console.log(err);
37                 } else {
38                     resolve(‘更新成功‘);
39                 }
40             })
41         })
42     }
43
44     async function update() {
45         let result = ‘‘;
46         //筛选出在公屏发言出现的环球uid和其对应的index
47         var getinfoResult = await getInfo();
48         for (let i = 0; i < getinfoResult.length; i++) {
49             var updateResult = await updateName(getinfoResult[i]);
50             console.log(updateResult);
51         }
52         return result ? result : ‘success‘;
53     }
54
55     update().then(function(result) {
56         console.log(result);
57
58         //断开数据库连接
59         connection.end();
60     })
61 }

.babelrc文件(使用ES7的Async/Await需要进行babel转码)

{
  "presets": [
    "stage-0"
  ],
   "plugins": ["transform-async-to-generator"]
}

  以上代码只是举例,主要是来说明async的使用,并不能直接运行,实现的需求应该很容易理解,就是在table表中找到所以记录的index和name字段,存放在

getinfoResult变量中,然后该变量遍历每一项,进行更新操作。因为有了async流程控制将getInfo()和updateName(getinfoResult[i])两个异步操作改成同步进行,这样程序运行起来才不会因为异步的原因而报错。

关于async的详细可以查看阮一峰大神的教程: 异步操作和Async函数

时间: 2024-10-22 11:48:01

Nodejs中使用异步流程控制Async的相关文章

Nodejs - 框架类库 - Nodejs异步流程控制Async

简介 Async是一个流程控制工具包,提供了直接而强大的异步功能 应用场景 业务流程逻辑复杂,适应异步编程,减少回调的嵌套 安装 npm insatll async 函数介绍 Collections each: 如果想对同一个集合中的所有元素都执行同一个异步操作. 1 var async = require('async'); 2 3 var t = require('./t'); 4 var log = t.log; 5 6 /** 7 * 8 * async提供了三种方式: 9 * 1. 集

异步流程控制-7行代码学会co模块

首先请原谅我的标题党(●-●),tj 大神的 co 模块源码200多行,显然不是我等屌丝能随便几行代码就能重写的.只是当今大家都喜欢<7天学会xx语言>之类的速效仙丹,于是我也弄个类似的名字<7行代码学会co模块>来博眼球. 为了避免被拖出去弹小JJ,还是先放出所谓的 7 行代码给大家压压惊: function co(gen) { var it = gen(); var ret = it.next(); ret.value.then(function(res) { it.next(

NodeJS中的异步I/O、事件驱动

nodejs的主要特点是单线程.异步I/O.事件驱动.让我们先大概了解一下这些名词的意思. 单线程 单线程是任务按照顺序执行的,并且每次只执行一个任务,只有前面的任务执行完成以后,后面的任务才执行.在JS引擎中负责解释和执行JavaScript代码的线程只有一个,即主线程.但实际上还存在其他的线程.例如处理AJAX请求的线程.处理DOM事件的线程.定时器线程.读写文件的线程等.这些线程可能存在与JS引擎之内,也可能存在与JS引擎之外,这些线程为工作线程. 同步和异步 同步:执行任务时,后面的任务

nodejs 中的异步之殇

nodejs 中的异步之殇 终于再次回到 nodejs 异步中,以前我以为异步在我写的文章中,已经写完了,现在才发现,还是有很多的地方没有想清楚,下面来一一说明. 模块同步与连接异步 大家应该,经常使用 express 进行网站开发.express 本来的问题不是重点,你肯定要用到第三工具,redis, mysql 了之类的. redis 需要连接,而连接成功需要一个回调(他是一个异步).问题就在这里,这个问题是:倒底是 redis 先连接成功,还是 express 先启动成功? redis.o

js 异步流程控制之 avQ(avril.queue)

废话前言 写了多年的js,遇到过最蛋疼的事情莫过于callback hell, 相信大家也感同身受. 业界许多大大也为此提出了很多不错的解决方案,我所了解的主要有: 朴灵 event proxy, 简单明了容易上手 老赵的 wind.js, 写起来最舒坦,最能表达程序顺序执行逻辑 Promise,个人感觉为解决一个坑引入另外一个坑,写出来的代码一大坨,代码可读性最差 我这人闲着没事也爱折腾,我也自己造轮子,不为别的只为自己代码写的舒服流畅. 传送门:目前只支持 node.js 环境,以后有时间再

汇编中精妙的流程控制

汇编中精妙的流程控制 前言 今天一天挺废啊,百无聊赖啊,唉,也不想学习,看了一天的电视了,不过好在我还是想看看OS中的东西,这次咱们一起来看看一个特别有趣的内容,就是汇编级的语言,如何利用寄存器实现if/for/while这些高级语言的流程控制,这一点十分神奇.保证你绝对想不到在汇编中是这样实现平时的流程控制的. 正文 条件码寄存器 这个子标题在之前就出现过,条件码寄存器与普通的寄存器不同,他们都是1位寄存器,换句话说,它们当中的值只有0和1.当有算数与逻辑发生时,这些条件码寄存器当中的值会相应

Node.js异步流程控制

原文地址:Node.js异步流程控制 原文地址:https://www.cnblogs.com/edward852/p/8580917.html

NodeJs中的异步

原文引用https://www.dazhuanlan.com/2019/08/25/5d625d714f62a/ 这篇文章主要讨论NodeJs中的异步问题.使用NodeJs编写进程也一年多了,在公司实习的时候,公司两个项目的后台都是我负责使用NodeJs和Sails框架编写的.工作模式主要是我在服务器端提供RESTful接口,网页端通过AJAX方式获取服务端的数据.在做的过程中,遇到了许多问题,感触最深的是异步编程的思维习惯还不是适应的很好. 异步背景 其实,异步很早都有了,例如在操作系统中就有

异步流程控制之Async模块

一.Async模块介绍 Async是一个使用比较广泛的JavaScript异步流程控制模块,除了可以在Node.js上运行,还可以在浏览器端运行. Async模块提供了约20多个实用的函数来帮助我们理清在实用Node.js过程中各种复杂的回调. 二.Async函数介绍 Async的内容分为三部分: 流程控制(Control Flow):简化十种常见流程的处理 集合处理(Collections):如何使用异步操作处理集合中的数据 工具类(Utils):几个常用的工具类 1). 集合: Collec