我通過下面的函數callRestApi
接收來自休息API的數據。但是,我收到通過websocket收到的其他數據的更新,我想確保我不會錯過任何內容。因此,我在調用其餘端點之前開始緩衝websocket事件。在收到剩餘響應後,我會調度緩衝的事件並開始分配隨後收到的任何新內容,並更新我的數據副本。但是,我是否正確實施了這個?特別是,我可能會錯過函數startDispatchingEvents中的一個事件,我將這個事件分配給ws.onmessage
一個新值。我正在使用redux調度程序。如果我重新分配ws.onmessage,我可以錯過web套接字事件嗎?
export const startBufferingEvents =() => {
eventBuffer = [];
ws.onmessage = msg => {
eventBuffer.push(msg);
}
};
export const startDispatchingEvents = (dispatcher) => {
eventBuffer.forEach(evt => dispatcher(evt));
ws.onmessage = evt => dispatcher(evt);
};
startEventBuffering()
.then(()=>callRestApi())
.then(restResponse=>dispatch(action(restResponse)))
.then(()=>startDispatchingEvents((evt)=>eventDispatcher(dispatch, evt)))
};