【发布时间】:2020-03-28 20:52:44
【问题描述】:
我正在尝试在 rxjs 可观察对象中接收到某个事件后启动 socket.io 连接。如果 socket.io 连接在订阅之外,则在 startEventStream 内可以正常启动,但是当放置在订阅中时,即使事件正在触发,也永远不会调用套接字内的回调。
function startEventStream(
stateLoaded$: Observable<LoginEvent>
): Observable<AoEvent> {
const socket = require('socket.io-client')('http://localhost:8003')
const ret = new Subject<AoEvent>()
const merged = merge(stateLoaded$, ret)
const session = '895e17a0-6c2b-11ea-8d86-45f581e4b250'
const token =
'f3ccdd81c2ece391891cba4f7d4eb8466d3d44675dd70f11e21190ae13dfdf69'
merged.subscribe({
next(val) {
process.nextTick(() => {
if (val.type == 'state-loaded') {
console.log('we should be connecting') // this prints
socket.on('connect', function() {
console.log('connected') // this doesn't print
ret.next({ type: 'socket-connected' })
socket.emit('authentication', {
session,
token
})
})
}
})
}
})
return ret
}
【问题讨论】:
-
您可能希望根据this gist 查看更多基于套接字的流的 RxJs-ish 实现。详细说明可参见this article
标签: javascript typescript sockets socket.io rxjs