как использовать rxjs bindCallback - PullRequest
0 голосов
/ 01 февраля 2019

Я пытаюсь использовать bindCallback для mqtt-client connect-event (https://www.npmjs.com/package/mqtt#event-connect) и получаю ошибку. Что я делаю не так? *

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

ошибка

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)

package.json

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

node -v
v10.10.0

npm -v
6.5.0

Ответы [ 2 ]

0 голосов
/ 26 марта 2019

См. Также https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Function/bind

Другой стиль:

const client = mqtt.connect("...")
const clientOnObs = bindCallback(client.on).bind(client)
clientOnObs('connect').subscribe(console.log)
0 голосов
/ 18 февраля 2019

Если вы хотите использовать bindCallback для функции объекта, вы должны позаботиться о контексте.Операция bindCallback вызовет функцию с apply и передаст ее в качестве текущего контекста.Чтобы исправить это, вы можете переписать свой код на:

const clientOnObs = bindCallback(client.on);
clientOnObs.call(client, 'connect').subscribe(console.log);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...