remesh
remesh copied to clipboard
StartedEvent effect 依赖于 dom 的挂载, dom 的挂载依赖于 StartedEvent 应该怎么实现呢
场景: 视频通话开启摄像头本地展示并上传摄像头流。
第三方服务:
class CameraShareService {
public startLocal(dom: HTMLElement): void
}
通过remesh建模如下:
OpenCameraCommand
OpenCameraStartedEvent
OpenCameraSuccessEvent
问题
当 OpenCameraStartedEvent
事件触发同时修改状态visible
渲染摄像头 dom,但是 OpenCameraStartedEvent
的 effect 执行
cameraShareService.startLocal
时依赖这个 dom 引用,此时并不能保证 dom 是否挂载完成,应该怎么样处理比较好呢。
想了一个方法是增加一个摄像头 dom 挂载的 event: CameraDOMMountedEvent(dom)
,但是似乎不能保证挂载一定会发生在执行 effect 之后?还是说调用 cameraShareService.startLocal
应该放在 CameraDOMMountedEvent
effect 中呢
domain.effect({
impl: ({ fromEvent }) =>
fromEvent(OpenCameraStartedEvent).pipe(
switchMap(() => fromEvent(CameraDOMMountedEvent)),
switchMap(dom => {
cameraShareService.startLocal(dom)
return [OpenCameraSuccessEvent()]
})
)
})