下記の機能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)))
};