CNode

node mysql 调用 query是异步方法吗

Bbinlaniua发布于13 年前最后回复12 年前10 回复8526 浏览0 收藏

var x = undefined; db.query(xx, function(e, r, f){ x = r; console.log('1' + x);}); console.log('2' + x);


先打印了2, 再打印了1

查看回复

回复 (10)

G
ggaaooppeenngg#1·13 年前

是异步的。

B
binlaniua#2·13 年前
引用 ggaaooppeenngg是异步的。

额, 那做分页岂不是要 db.query(xx, function(){ db.query(xx, function(){ }); }); 这么写了 -_-

Z
zhouaini528#3·13 年前
引用 ggaaooppeenngg是异步的。

@Tkk你可以用同步的方法呀

Y
youxiachai#4·13 年前
引用 ggaaooppeenngg是异步的。

@Tkk 不然怎么写..其实用async 就行了..

B
binlaniua#5·13 年前
引用 ggaaooppeenngg是异步的。

@zhouaini528 求教怎么用同步

G
ggaaooppeenngg#6·13 年前
引用 ggaaooppeenngg是异步的。

@Tkk node 写着写着,不就写成这样了…………

Y
yorkie#7·13 年前

使用EventEmitter封装更好 定义:

var EventEmitter = require('events').EventEmitter;
var util = require('util');

function MySQLQueue() {
  EventEmitter.call(this);
  this._db = /* 创建mysql连接实例 */;
}
util.inherits(MySQLQueue, EventEmitter);

MySQLQueue.prototype.getPage = function(page) {
  var self = this;
  this._db.query(page, function(er, list) {
    if (er)
      self.emit('error', er);
    else
      self.emit('page', list);
  })
  return this;
}

使用:

var mysql = new MySQLQueue();
mysql.on('page', function(list) {
  /* TODO */
})
mysql.on('error', function(er) {
  /* handle errors */
})

mysql.getPage(1).getPage(2);
R
ronincn#8·12 年前

必须经过的坎儿

F
feikeq#9·12 年前

同样,觉得这样很坑啊..

C
coordcn#10·12 年前

不异步,node作甚?楼上的那个建议楼主用Async的,你确定Async能帮到楼主么?

参与回复
登录后即可参与回复。登录