diff --git a/lib/resultset.js b/lib/resultset.js index d175f3f..2d90b28 100644 --- a/lib/resultset.js +++ b/lib/resultset.js @@ -52,6 +52,48 @@ function ResultSet(rs) { })(); } +ResultSet.prototype.toObjArrayAsync = function () { + return new Promise((resolve, reject) => { + this.toObjectAsync().then((results)=> { + resolve(results.rows) + }).catch((err) => reject(err)) + }) +}; + +ResultSet.prototype.toObjectAsync = function () { + return new Promise((resolve, reject) => { + var tick = + (process && process.versions && process.versions.node === '0.9.0') ? + tickShim : + (setImmediate || process && process.nextTick|| tickShim); + + function tickShim(fn) {setTimeout(fn, 1);} + + this.toObjectIter(function (err, rs) { + if (err) reject(new Error(err)); + + var rowIter = rs.rows; + var rows = []; + var row = rowIter.next(); + + (function next() { + // invoke the iterator function + rows.push(row.value); + row = rowIter.next(); + + if (!row.done) { + tick(next); + } + else{ + rs.rows = rows; + resolve(rs); + } + })(); + }); + + }) +} + ResultSet.prototype.toObjArray = function (callback) { this.toObject(function (err, result) { if (err) return callback(err);