//通过this访问内置流程对象, 在每个流程中都能使用 //this.conn => mysql-connection //this.results => 整个流程数已经返回的值 //this.next => 函数, 可以进入下一个流程, 第一个函数为错误信息, 后面的为该流程返回值 //每个流程必须为 function() { } 或者 function(next, thisarg) {} //next 等同于 this.next //thisarg 等同于 this //注意: 箭头函数中使用 this 得到的是外层 scope 的 this, 所以添加流程不能偷懒 //this 为 sql 构造器函数, 最后使用 query(done) 或者 adminQuery(done) 执行, 与 lib.dal 使用方法相同 lib.dal('select * from users where 1 = 1') ('and username=?', username).query(done); //相当于 var sql = 'select * from users where 1 = 1'; if (usersname === null || usersname === undefined) sql += 'and username=?'; //添加一个参数 usernname conn.query(done); //整个事务使用同一个mysql-connection lib.dal.trans( //创建mysql-connection并且开启事务, function () { //一个流程 this('select * from users').query(this.next); }, function () { //一个流程 this('select * from users').query(this.next); }, function () { //一个流程 this('select * from users').query(this.next); this.next('设置任何错误信息,将回滚事务'); }, //在done方法前内置提交/回滚事务,并释放mysql-connection (err, r) => { //console.log(JSON.stringify(r)); } ); lib.dal.map( //使用lib.dal.map.call(流程对象 或者 mysql-connection [11, 13, 16], (v, k) => { //三个流程 this.next(v+2); }, (err, r) { //done console.log(r); // => [13, 15, 18] } ); lib.dal.map( //同上 流程1, 流程2, 流程3, done );