首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解节点-mariasql示例代码

理解节点-mariasql示例代码
EN

Stack Overflow用户
提问于 2014-10-13 22:37:16
回答 1查看 2.7K关注 0票数 0

我在节点-mariasql库上看到了以下代码-

代码语言:javascript
复制
var inspect = require('util').inspect;
var Client = require('mariasql');

var c = new Client();
c.connect({
  host: '127.0.0.1',
  user: 'foo',
  password: 'bar',
  db: 'mydb'
});

c.on('connect', function() {
   console.log('Client connected');
 })
 .on('error', function(err) {
   console.log('Client error: ' + err);
 })
 .on('close', function(hadError) {
   console.log('Client closed');
 });

var pq = c.prepare('SELECT * FROM users WHERE id = :id AND name = :name');

c.query(pq({ id: 1337, name: 'Frylock' }))
 .on('result', function(res) {
   res.on('row', function(row) {
     console.log('Result row: ' + inspect(row));
   })
   .on('error', function(err) {
     console.log('Result error: ' + inspect(err));
   })
   .on('end', function(info) {
     console.log('Result finished successfully');
   });
 })
 .on('end', function() {
   console.log('Done with all results');
 });

c.end();

这方面的输出已指定为-

代码语言:javascript
复制
/* output:
    Client connected
    Query #1 row: [ 'first query' ]
    Query #1 finished successfully
    Query #2 was aborted
    Query #3 row: [ 'third query' ]
    Query #3 finished successfully
    Done with all queries
    Client closed
 */

在我看来,c.connect似乎是一个异步调用。那么,代码的底部不应该放在c.on('connect')回调中吗?否则,当我执行c.queryc.prepare时,连接已经打开的保证是什么?

代码的底部部分。

代码语言:javascript
复制
var pq = c.prepare('SELECT * FROM users WHERE id = :id AND name = :name');

c.query(pq({
    id: 1337,
    name: 'Frylock'
}))
    .on('result', function (res) {
    res.on('row', function (row) {
        console.log('Result row: ' + inspect(row));
    })
        .on('error', function (err) {
        console.log('Result error: ' + inspect(err));
    })
        .on('end', function (info) {
        console.log('Result finished successfully');
    });
})
    .on('end', function () {
    console.log('Done with all results');
});

c.end();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-13 23:05:26

mysql协议要求您在发送下一个命令之前等待前面的命令完成,因此大多数客户端自动具有某种类型的内部队列移到队列中的下一个命令。例如,此代码不并行执行3次查询:

代码语言:javascript
复制
c.query('select sleep(1)');
c.query('select sleep(2)');
c.query('select 1', console.log);

相反,它将在3秒后输出"select 1“结果。因此,“连接已经打开的保证是什么”的答案是“客户端设计向您保证这一点”。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26350001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档