Node.js不会等待MySQL服务器发送答案,并继续asynchronous工作
随便打印,不要等MySQL发送回复。
var mysql=require('mysql').createConnection({ host:'localhost',user:'root',password:'',database:'dbname',port:3306 }); mysql.connect(function(error){if(error){throw error;}else{console.log('MYSQL SERVER [OK]');}}); console.log('// INI //'); var sql='SELECT * FROM sys_users'; mysql.query(sql,function(error,rows){ if(!error){ for(i=0;i<rows.length;i++){ if(i<rows.length-1) console.log(rows[i].username); else console.log(rows[i].username); } }else console.log('Error'); }); console.log('// END //'); mysql.end();
将不得不打印:
- MYSQL SERVER [确定]
- // INI //
- 项目清单
- // 结束 //
但印有:
- // INI //
- // 结束 //
- MYSQL SERVER [确定]
- 项目清单
这是Node.js的本质 – callback和asynchronous代码处理。 如果你想在返回数据库响应之后运行come代码,将该代码放在callback中:
mysql.query(sql,function(error,rows){ if (!error){ for(i=0;i<rows.length;i++){ if(i<rows.length-1) console.log(rows[i].username); else console.log(rows[i].username); } } else { console.log('Error'); } /* Code to run. Move it to first `if`, if you want to run it only, when no error will occur. */ console.log('//END //'); }); mysql.end();
- 迭代asynchronous函数
- 使用嵌套的async.forEachSeries和async.waterfall来控制Lambda Node.js代码的sorting
- 在请求完成数据处理之后Nodejs做出响应
- 每个简单的asynchronouseachLimit示例会引发范围错误?
- Async.retry在等待间隔之前立即执行
- 为什么不能stream行的JavaScript运行时处理同步的asynchronous脚本?
- 套接字streamasynchronous调用到rpc行动内的MySQL
- JS闭包,Redis,循环,asynchronous::空数组
- forEach Loop中的asynchronousfindOne()操作