订阅Observable返回错误的值

时间:2018-01-12 22:19:51

标签: javascript node.js electron

我正在使用Electron构建应用程序。我的文件结构如下所示,所有文件夹都在同一目录中。我的问题是,当我订阅startActivity方法时,我会找回两个不同的值。看起来单身人士没有工作,我正在找回一个对象的两个不同实例。

  

文件夹结构

- activity.ts
- main.ts
- renderer.ts
  

renderer.ts

import Activity from "./activity";

const activity = Activity.getInstance();

activity.startActivity().subscribe(
    data => {
        console.log("Renderer: " + data);
    }
);
  

activity.ts

import {Observable} from 'rxjs/Rx';


class Activity {
    private static _instance: Activity;

    public static getInstance() {
        return this._instance || (this._instance = new this());
    }

    public startActivity() {
        return Observable
            .interval(this.config.timeInterval)
            .map(() => {
                return Math.random();
            });
    }
}

export default Activity;
  

main.ts

import {app} from "electron";


app.on("ready", () => {

    const activity = Activity.getInstance();
    activity.startActivity().subscribe(
        data => {
            console.log("Main: " + data);
        }
    );
});
  

结果

Renderer: 0.599276120749491
Main: 0.5746604589633764

那么,为什么我没有从console.log()个来电中获得相同的数据呢? PS:我对Node.js世界很陌生,所以我确定这是微不足道的......

1 个答案:

答案 0 :(得分:1)

基于多进程的Electron架构的原因。 Main / Renderer在不同的进程上运行,意味着您不能直接共享对象,因为也不提供单例对象,导致主进程也创建一个对象和渲染器进程创造一个也是自己的。如果您想在进程之间建立单一状态,则应该通过在ipc协议之间传递值来考虑同步。