Javascript 组件间通信的淘汰邮箱-如何确保订阅服务器处于活动状态

Javascript 组件间通信的淘汰邮箱-如何确保订阅服务器处于活动状态,javascript,typescript,knockout.js,knockout-postbox,Javascript,Typescript,Knockout.js,Knockout Postbox,我有一个问题,我在一个组件中发布了一个可观察到的敲除,还有另一个组件的视图模型订阅了这个邮箱事件 发布事件位于我的“数据表”组件视图模型中,如下所示: this.pagerParams = ko.observable({ currentPage: this.currentPage, totalItems: this.recordsTotal, itemsPerPage: this.length }).publishOn("pagerParams"); 然后我有一个“寻呼机”组件订阅这个邮箱发布

我有一个问题,我在一个组件中发布了一个可观察到的敲除,还有另一个组件的视图模型订阅了这个邮箱事件

发布事件位于我的“数据表”组件视图模型中,如下所示:

this.pagerParams = ko.observable({ currentPage: this.currentPage, totalItems: this.recordsTotal, itemsPerPage: this.length }).publishOn("pagerParams");
然后我有一个“寻呼机”组件订阅这个邮箱发布

ko.postbox.subscribe("pagerParams", (params: PagerParams) => {
            this.assignParamValues(params, false);

            this.numberOfPages(Math.ceil(this.totalItems() / this.itemsPerPage()) || 1);
            this.pageNumbers(this.getPageNumbers());
        });
上述邮箱订阅已在视图模型构造函数中注册。根据哪个组件首先激活,我有时会遇到这样一个问题:pagerParams订阅在“数据表”组件视图模型中发布,但寻呼机不确认事件已发布

我发现这是因为“pager”组件需要在“data table”组件之前处于活动状态,否则“pager”视图模型订阅仅在该行代码运行时检查任何传入发布。。很多时候,这是在数据表发布事件之后


我的问题是,如何确保寻呼机组件在数据表组件之前变为活动状态,以便发布子事件系统在此场景中按预期工作

您需要一个握手协议。启动时,每个组件将在邮箱上发布一条
started
消息。双方还将订阅另一方发送的
started
消息,收到消息后,将再次发出
started
并取消订阅

无论哪个先开始,都会发布一条从未收到的消息。第二个将开始发布,第一个将接收、重新发送和取消订阅,第二个将重新发送从未收到的消息。每个人都知道另一个还活着,然后可以做任何相关的任务