刚学习数据库的操作,向mysql发出申请后,会接着执行后面的代码,同时等待数据库的回调。 那么如果发出多个请求,多个回调的执行顺序是啥样的呢?
比如这样的代码
var mysql = require(‘mysql’); var cnString = require(’.../sqlConnection.json’); var connection = mysql.createConnection(cnString); connection.connect(); var userAddSql = ‘INSERT INTO node_user(id,name,age) VALUES(0,?,?)’; var userAddSql_Params = ["张洒 ’ – " , 55]; //增 add connection.query(userAddSql,userAddSql_Params,function (err, result) { //回调1 }); connection.end();
connection = mysql.createConnection(cnString); connection.connect(); var userAddSql = ‘INSERT INTO node_user(id,name,age) VALUES(0,?,?)’; var userAddSql_Params = ["张洒 ’ – " , 55]; //增 add connection.query(userAddSql,userAddSql_Params,function (err, result) { //回调2 }); connection.end();
connection = mysql.createConnection(cnString); connection.connect(); var userAddSql = ‘INSERT INTO node_user(id,name,age) VALUES(0,?,?)’; var userAddSql_Params = ["张洒 ’ – " , 55]; //增 add connection.query(userAddSql,userAddSql_Params,function (err, result) { //回调3 }); connection.end();
connection = mysql.createConnection(cnString); connection.connect(); var userAddSql = ‘INSERT INTO node_user(id,name,age) VALUES(0,?,?)’; var userAddSql_Params = ["张洒 ’ – " , 55]; //增 add connection.query(userAddSql,userAddSql_Params,function (err, result) { //回调4 }); connection.end();
预想的是,会按照回调1、2、3、4的顺序被执行,因为node是单线程的,回调函数应该按照申请的顺序被回调。 但是实际运行几次后发现,每次四个回调的先后执行顺序完全不一样。 哪个回调先回来都有可能,这是啥原因呢?
怀疑问题出在mysql方面,但是不能确定。
所以想问问大家。
同步执行最好封装个最小异步单位来做,保证顺序一致,例子: https://github.com/zy445566/myBlog/blob/master/20180414block-run/index.js
@jyk0011 所谓异步,就是不能保证执行时间和返回顺序。 你这个场景,各个回调的顺序是不可预期的。要实现你的需求,得串行(比如 await)调用数据库。
@jyk0011 不会吧 底层还是异步哦 每个用户互不影响哦. 和你这样说 最新nodejs的async await 都没有多大用处了.包括koa egg这样的框架都是这样玩得