我希望扩展Node.js中的当前类以向其添加promise
属性:
import { spawn } from 'child_process'
const cp = spawn('echo', ['hello world'])
cp.promise = new Promise((r, j) => cp.on('exit', r).on('error', j))
但是,IDE不会选择promise
属性来获取建议和自动完成功能。
如果我创建了一个类并扩展了获得原始实例时所得到的对象的原型,则IDE可以正常工作:
class ChildProcessWithPromise extends ChildProcess {
constructor(p, promise) {
super()
this._promise = promise
Object.assign(this, p)
}
/**
* @type {Promise.<PromiseResult>} The promise resolved when the process exits.
*/
get promise() {
return this._promise
}
}
是否有这样做的危险,以致在某个时间点其中一种方法可以访问旧的this
?我已经使用此设置对其进行了检查,它似乎可以正常运行:
const { EventEmitter } = require('events')
class Test extends EventEmitter {
constructor(n, t) {
super()
this._n = n
if (t) Object.assign(t)
}
run() {
this.emit('data', this._n)
}
}
const t = new Test(1)
t.on('data', d => console.log('t %s', d))
const t2 = new Test(2, t)
t2.on('data', d => console.log('t2 %s', d))
t.run()
t2.run()
结果(正确):
t 1
t2 2
但是,我想看看是否有人能想到可能导致意外行为的情况。将函数绑定到方法内部时的提示行。