如何使用rxjs bindCallback

时间:2019-02-01 10:06:12

标签: rxjs

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

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 :(得分:1)

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

const clientOnObs = bindCallback(client.on);
clientOnObs.call(client, 'connect').subscribe(console.log);

答案 1 :(得分:0)

另请参阅https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Function/bind

另一种风格:

x: (textInputField !== "" && isArabicAlignment()) ?
              (text_input.x + text_input.contentWidth)) : //Changing Cursor in reverse.