你實際上是在尋找fromEvent
或fromEventPattern
:
Rx.Observable.fromEvent(websocket, 'message').map(/*...*/).subscribe();
Rx.Observable.fromEventPattern(
function add(h) { websocket.addEventListener(h); },
function remove(h) { websocket.removeEventListener(h); })
.map(/*...*/)
.subscribe();
第一個將嘗試使用一些訂閱的事件發射器,它的WebSocket是標準的方式。但是,如果失敗,則可以使用fromEventPattern
來指定如何將處理程序添加到對象中或從中刪除。
,還應注意,JavaScript不沿隱式引用您正在使用C#和Java的執行對象的實例傳遞,那麼你的代碼fromCallback(websocket.onmessage)
不沿websocket
傳遞,它是沿着引用傳遞到方法來自函數原型。 this
將在執行時間確定。
Rx.Observable.fromCallback
適用於最後一個參數爲回調函數的函數,該函數是異步JavaScript代碼的標準模式。此外,fromCallback
方法不返回Observable
它返回一個函數,當被調用時返回Observable
,即
function methodWithCallback(arg0, arg1, cb) {
setTimeout(function() {
cb(arg0 + arg1);
}, 2000);
}
var newMethod = Rx.Observable.fromCallback(methodWithCallback);
//[After 2 seconds] 3
newMethod(1, 2).subscribe(console.log.bind(console));