如何使用rxjs的bindCallback

2024-05-24

我正在尝试将 bindCallback 用于 mqtt-client connect-event (https://www.npmjs.com/package/mqtt#event-connect https://www.npmjs.com/package/mqtt#event-connect)并出现错误。我究竟做错了什么?

const client = mqtt.connect("...")
const clientOnObs = bindCallback(client.on)
clientOnObs('connect').subscribe(console.log)

error

TypeError: Cannot read property '_events' of undefined
    at _addListener (events.js:203:19)
    at addListener (events.js:259:10)
    at Observable._subscribe (/Users/robert.rajakone/repos/2018_diprem/example-message-simulator/node_modules/rxjs/src/internal/observable/bindCallback.ts:215:26)
    at Observable._trySubscribe (/Users/robert.rajakone/repos/2018_diprem/example-message-simulator/node_modules/rxjs/src/internal/Observable.ts:231:19)
    at Observable.subscribe (/Users/robert.rajakone/repos/2018_diprem/example-message-simulator/node_modules/rxjs/src/internal/Observable.ts:212:14)
    at Object.<anonymous> (/Users/robert.rajakone/repos/2018_diprem/example-message-simulator/main.ts:30:24)
    at Module._compile (internal/modules/cjs/loader.js:689:30)
    at Module.m._compile (/usr/local/lib/node_modules/ts-node/src/index.ts:439:23)
    at Module._extensions..js (internal/modules/cjs/loader.js:700:10)
    at Object.require.extensions.(anonymous function) [as .ts] (/usr/local/lib/node_modules/ts-node/src/index.ts:442:12)

包.json

{
  "dependencies": {
    "i": "^0.3.6",
    "mqtt": "^2.18.8",
    "rxjs": "^6.4.0"
  }
}

node -v
v10.10.0

npm -v
6.5.0

当你想在对象的函数上使用bindCallback时,你必须注意上下文。操作bindCallback将使用apply调用该函数并将其作为当前上下文传递。为了修复它,您可以将代码重写为:

const clientOnObs = bindCallback(client.on);
clientOnObs.call(client, 'connect').subscribe(console.log);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用rxjs的bindCallback 的相关文章

随机推荐