我正在使用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世界很陌生,所以我确定这是微不足道的......
答案 0 :(得分:1)
基于多进程的Electron架构的原因。 Main / Renderer在不同的进程上运行,意味着您不能直接共享对象,因为也不提供单例对象,导致主进程也创建一个对象和渲染器进程创造一个也是自己的。如果您想在进程之间建立单一状态,则应该通过在ipc协议之间传递值来考虑同步。