首先,我们都知道,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函数

最新文章

  1. zookeeper+jstorm的集群搭建
  2. webfrrm基础
  3. Struts2 action的单例与多例
  4. CLR via C#(09)-扩展方法
  5. php 5.5.1 编译安装过程
  6. sublime package
  7. VS2012编译可在WinXP兼容程序
  8. MVC中使用AuthorizeAttribute注意事项
  9. (转)C#中的 break 与continue 的使用和注意
  10. linux查找文件或字符串的命令
  11. Android开发在路上:少去踩坑,多走捷径(转)
  12. SAP CRM 高效调试方法
  13. MonoDeveloper 快捷键
  14. 框架学习之Spring(一IOC)----HelloWrod
  15. OSError: cannot identify image file
  16. uwsgi 的巨坑
  17. nodejs——发送邮件(带附件)
  18. [CQOI 2018]九连环
  19. JAVA 判断字符串是否可转化为JSONObject、JSONArray
  20. Kali Linux下安装配置ProFTPD实例

热门文章

  1. model中的Meta类
  2. 从map中取出最大或最小value对应的key---多种写法
  3. SDUT OJ 数据结构实验之二叉树二:遍历二叉树
  4. ActiveMQ消息队列的搭建和使用
  5. js 伪数组 arguments
  6. 二 ASP.NET MVC 第一个程序 hello world
  7. jeesite模块解析,功能实现
  8. 【语义分割】PSPNet中PSP模块的pytorch实现
  9. Mysql相关操作:
  10. CSS column 布局总结