我的应用程序中存在网络操作,每次应用程序重新连接到Internet时都会触发fetchUser。
我还有另一个传奇,如下所示
export function* watchNewMessage() {
const { id = {} } = yield take(SET_USER_ID)
const channel = yield call(subscribeToNewMessages, id)
while (true) {
const message = yield take(channel)
console.log(message)
}
}
现在的问题是,当应用程序断开连接时,我停止接收消息了,这很好,因为我的侦探应该重新启动saga函数,但是由于它陷入了while true循环中,因此永远都不会等待被重置。那么,如何在每次调用SET_USER_ID时更改要重置的代码?
这是其余的相关代码
export function subscribeToNewMessages(id) {
return eventChannel(emit => {
const pubsub = fetchNewMessage(emit, id)
return () => {
pubsub.unsubscribe()
}
}, buffers.expanding(100))
}
export const fetchNewMessage = async (emit, id) => {
return PubSub.subscribe(`${IOT_PREFIX}/discussion/${id}/message`).subscribe({
next: data => { emit(data.value) },
error: () => console.log('error'),
close: () => console.log('close'),
})
}
答案 0 :(得分:0)
好的,我已经开始工作了
我创建了一个新函数
导出功能* watchNewMessage(){ 产生takeLatest(SET_USER_ID,manageSubscription) }
导出功能* manageSubscription(){ const {id = {}} =收益(SET_USER_ID) const channel = yield call(subscribeToNewMessages,id) 而(true){ const message = yield take(channel) console.log(消息) } }
现在它可以完美运行