-
-
Notifications
You must be signed in to change notification settings - Fork 33.5k
Closed
Labels
questionIssues that look for answers.Issues that look for answers.
Description
- Version: 12.11.1 and 13.1.0
- Platform: Linux *** 4.15.0-66-generic Deprecate domains #75-Ubuntu SMP Tue Oct 1 05:24:09 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
- Subsystem: util
Hi all
I'm having an issue with util.promisify
, trying to apply it to an object method, as follow
const net = require('net')
const util = require('util')
async function start () {
try {
const server = net.createServer()
const listen = util.promisify(server.listen)
await listen(9123)
console.log('started')
} catch (error) {
console.error(error)
}
}
start()
output is
TypeError: Cannot read property '_handle' of undefined
at Server.listen (net.js:1383:12)
at internal/util.js:277:30
at new Promise (<anonymous>)
at internal/util.js:276:12
at start (/home/simone/Desktop/util-promisify.js:8:11)
at Object.<anonymous> (/home/simone/Desktop/util-promisify.js:15:1)
at Module._compile (internal/modules/cjs/loader.js:945:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:962:10)
at Module.load (internal/modules/cjs/loader.js:798:32)
at Function.Module._load (internal/modules/cjs/loader.js:711:12)
because in net.js:1383
there is
if (this._handle) {
while util.promisify
do
original.call(this, ...args, (err, ...values) => {
so this
at execution of listen
function is no more its own instance, but a new context.
Reading the documentation, this is not reported, so I'm opening this issue - that I suppose to be a bug.
In my opinion, a possible solution could be adding an optional arg instance
to util.promisify
, like
util.promisify(original, [instance])
then, after checked that instance is an object and instance[original]
exists, could be
original.call(instance || this, ...args, (err, ...values) => {
it could be called as
util.promisify(server.listen, server)
and works as aspected.
If you agree with this solution, I'd be glad to do that.
musahcoding
Metadata
Metadata
Assignees
Labels
questionIssues that look for answers.Issues that look for answers.