1
0
mirror of https://github.com/redis/node-redis.git synced 2025-08-06 02:15:48 +03:00

chore: add callback functionality back in

This also improves the performance for multi / batch commands a lot.
The reason is that now there are only callbacks internally even if
a promise is going to be returned in the end.
This commit is contained in:
Ruben Bridgewater
2017-11-29 19:16:40 -02:00
parent 2b4ab10305
commit d7c31da598
10 changed files with 288 additions and 184 deletions

View File

@@ -2,36 +2,51 @@
const betterStackTraces = /development/i.test(process.env.NODE_ENV) || /\bredis\b/i.test(process.env.NODE_DEBUG)
// TODO: Change the arguments to an object
// callOnWrite could be two things now
function Command(name, args, callOnWrite, transformer) {
function Command(name, args) {
var callback
if (args.length !== 0 && typeof args[args.length - 1] === 'function') {
this.promise = undefined
callback = args.pop()
} else {
this.promise = new Promise((resolve, reject) => {
callback = (err, res) => {
if (this.transformer !== undefined) {
const tmp = this.transformer(err, res)
err = tmp[0]
res = tmp[1]
}
if (err === null) {
resolve(res)
} else {
reject(err)
}
}
})
}
this.callback = callback
this.command = name
this.args = args
this.argsLength = 0
this.bufferArgs = false
var callback
transformer = transformer || function (err, res) {
return err || res
}
this.promise = new Promise((resolve, reject) => {
callback = (err, res) => {
if (err) {
const transformed = transformer(err)
if (transformed.stack) { // instanceof Error
reject(transformed)
} else {
resolve(transformed)
}
} else {
resolve(transformer(null, res))
}
}
})
this.callback = callback
this.callOnWrite = callOnWrite
this.transformer = undefined
this.callOnWrite = undefined
if (betterStackTraces) {
this.error = new Error()
}
}
module.exports = Command
function MultiCommand(name, args) {
this.command = name
this.args = args
this.argsLength = 0
this.bufferArgs = false
this.transformer = undefined
this.promise = undefined
this.callback = undefined
this.callOnWrite = undefined
}
module.exports = {
Command,
MultiCommand
}