Nodejs中使用异步流程控制Async
首先,我们都知道,Node基于事件驱动的异步I/O架构,所谓异步就是非阻塞,说白了就是一个事件执行了,我不必等待它执行完成后我才能执行下一个事件。所以在Node环境中的模块基本都是异步的,上一篇说到我在项目中改用了easymysql模块代替mysql模块,两个模块作查询的操作都是异步的,所以要实现嵌套查询往往会很麻烦,而且很大可能会报错。为此,为了实现查询同步,我引进了异步流程控制async模块,让js异步操作变成同步操作,这样一方面方便阅读理解,另一方面能够很好实现需求的目标,亲测有效~
update.js文件
'use strict'
var async = require('async');
var Client = require('easymysql');
var mysql = Client.create({
'maxconnections': 10
})
mysql.addserver({
host: 'localhost',
user: 'test',
password: '123456',
database: 'database'
}) exports.match = function(req, res) {
//获得需要所有记录信息
function getInfo() {
return new Promise((resolve, reject) => {
mysql.query('SELECT `index`,`name` from tableA', function(err, result) {
if (err) {
console.log(err);
} else {
resolve(result);
}
}) })
} // 将每一项的名字更新为gdt
function updateName(info) {
return new Promise((resolve, reject) => {
var index = info['index'];
var sql = "UPDATE `tableA` SET `tableB`.`name` = 'gdt' WHERE `tableA`.`index` =" + index;
mysql.query(sql, function(err, result) {
if (err) {
console.log(err);
} else {
resolve('更新成功');
}
})
})
} async function update() {
let result = '';
//筛选出在公屏发言出现的环球uid和其对应的index
var getinfoResult = await getInfo();
for (let i = 0; i < getinfoResult.length; i++) {
var updateResult = await updateName(getinfoResult[i]);
console.log(updateResult);
}
return result ? result : 'success';
} update().then(function(result) {
console.log(result); //断开数据库连接
connection.end();
})
}
.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函数
Nodejs中使用异步流程控制Async的更多相关文章
- (一)Nodejs - 框架类库 - Nodejs异步流程控制Async
简介 Async是一个流程控制工具包,提供了直接而强大的异步功能 应用场景 业务流程逻辑复杂,适应异步编程,减少回调的嵌套 安装 npm insatll async 函数介绍 Collections ...
- Nodejs异步流程控制Async
http://www.cnblogs.com/huair_12/p/4117351.html 很好的总结 关联下 以便以后学习使用
- node异步流程控制async
1.串行无关联:async.series(tasks,callback); 多个函数依次执行,之间没有数据交换,其中一个函数出错,后续函数不再执行 async.series({ one: functi ...
- nodejs进阶(7)—async异步流程控制
Async介绍 Async是一个流程控制工具包,提供了直接而强大的异步功能.基于Javascript为Node.js设计,同时也可以直接在浏览器中使用. Async提供了大约20个函数,包括常用的 m ...
- 【javascript】Promise/A+ 规范简单实现 异步流程控制思想
——基于es6:Promise/A+ 规范简单实现 异步流程控制思想 前言: nodejs强大的异步处理能力使得它在服务器端大放异彩,基于它的应用不断的增加,但是异步随之带来的嵌套.难以理解的代码让 ...
- NodeJS中的异步I/O、事件驱动
nodejs的主要特点是单线程.异步I/O.事件驱动.让我们先大概了解一下这些名词的意思. 单线程 单线程是任务按照顺序执行的,并且每次只执行一个任务,只有前面的任务执行完成以后,后面的任务才执行.在 ...
- node核心:异步流程控制
Node.js的异步是整个学习Node.js过程中重中之重. 1)异步流程控制学习重点 2)Api写法:Error-first Callback 和 EventEmitter 3)中流砥柱:Promi ...
- nodejs 中的异步之殇
nodejs 中的异步之殇 终于再次回到 nodejs 异步中,以前我以为异步在我写的文章中,已经写完了,现在才发现,还是有很多的地方没有想清楚,下面来一一说明. 模块同步与连接异步 大家应该,经常使 ...
- 使用yield进行异步流程控制
现状 目前我们对异步回调的解决方案有这么几种:回调,deferred/promise和事件触发.回调的方式自不必说,需要硬编码调用,而且有可能会出现复杂的嵌套关系,造成"回调黑洞" ...
随机推荐
- centos7 yum安装配置redis
1.设置Redis的仓库地址 yum install epel-release 2.安装redis yum install redis 修改配置文件,监听所有的IP地址 vim /etc/redis. ...
- MyBatis与JDBC的对比
//JDBC的步骤,1.加载驱动.2.获取连接.3.执行sql语句.4.处理结果集.5.关闭资源 Class.forName("com.mysql.jdbc.Driver").ne ...
- Spark调优秘诀——超详细
版权声明:本文为博主原创文章,转载请注明出处. Spark调优秘诀 1.诊断内存的消耗 在Spark应用程序中,内存都消耗在哪了? 1.每个Java对象都有一个包含该对象元数据的对象头,其大小是16个 ...
- 修改两行代码,让nginx支持phpinfo模式
Nginx服务器默认不支持pathinfo, 在需要pathinfo支持的程序中(如thinkphp),则无法支持”/index.php/Home/Index/index”这种网址. 网上流传的解决办 ...
- rabbitmq消息消费者
pom <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http:// ...
- OEL6.8安装虚拟带库模拟器
最近在虚拟机下搭建了一个OSB备份环境,其中使用到了虚拟带库,以下是虚拟带库的配置过程,简要记录之. 1.下载虚拟带库的源码(mhvtl-2016-03-10.tgz). 2.解压缩源码. # cd ...
- JavaWeb学习笔记(二)—— Tomcat服务器
一.Web开发概述 1.1 Web开发中常见的概念 [B/S系统和C/S系统] Brower/Server:浏览器 服务器 系统 ----- 网站 Client/Server:客户端 服务器 系统 - ...
- rest-assured的xmlPath使用方法总结
xmlPath的使用方法跟JsonPath的使用方法相近,下面简单总结一下: 准备xml文件数据: <records> <car name='HSV Maloo' make='Hol ...
- 【算法笔记】B1009 说反话
1009 说反话 (20 分) 给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出. 输入格式: 测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串.字符串由若干单词和若干空格 ...
- [转] 理解 JavaScript 的 async/await
[From] https://segmentfault.com/a/1190000007535316 边城 2016年11月19日发布 随着 Node 7 的发布,越来越多的人开始研究据说是 ...