Angular Observable.bindCallback()上的zone.run()

Angular Observable.bindCallback()上的zone.run(),angular,rxjs,electron,angular2-observables,zone.js,Angular,Rxjs,Electron,Angular2 Observables,Zone.js,我使用的是Electron,您可能知道,Electron的所有调用都在Angular的区域之外运行。因此,在使用Electron方法时,需要在某个时候调用zone.run() 典型的Electron调用如下所示(注意区域.run()): 上述方法非常有效。我是一个快乐的人。我可以马上离开,接受这个。然而,我想用可观察对象来写这篇文章,因此它与应用程序的其他方面有很好的联系 const openDialog = Observable.bindCallback(this.remote.dia

我使用的是Electron,您可能知道,Electron的所有调用都在Angular的
区域之外运行。因此,在使用Electron方法时,需要在某个时候调用
zone.run()

典型的Electron调用如下所示(注意
区域.run()
):

上述方法非常有效。我是一个快乐的人。我可以马上离开,接受这个。然而,我想用
可观察对象
来写这篇文章,因此它与应用程序的其他方面有很好的联系

    const openDialog = Observable.bindCallback(this.remote.dialog.showOpenDialog);
    return openDialog({
        properties: ['openDirectory'],
    }).map((directories) => {
        const projectName = path.basename(directories[0]);
        // WHERE DO I PUT ZONE.RUN?
        return projectName;
    });

我应该把
zone.run

zone.js放在哪里?有关于rxjs/electron api补丁的文档:

为什么不在完成订阅的过程中加入“run”提示:

}).map((directories) => {
        const projectName = path.basename(directories[0]);
        this.zone.run();  // <---- Right here?
        return projectName;
    });
}).map((目录)=>{
const projectName=path.basename(目录[0]);

this.zone.run();//所有electron API都已修补,加载
zone.js
后需要将此行放入
polyfill.ts

//import 'zone.js/dist/zone'; // originally added by angular-cli, comment it out
import 'zone.js/dist/zone-mix'; // add zone-mix to patch both Browser and Nodejs
import 'zone.js/dist/zone-patch-electron'; // add zone-patch-electron to patch Electron native API

我还创建了一个示例repo,因为这是无效的语法。您需要执行
this.zone(()=>{//INSIDE zone NOW})
//import 'zone.js/dist/zone'; // originally added by angular-cli, comment it out
import 'zone.js/dist/zone-mix'; // add zone-mix to patch both Browser and Nodejs
import 'zone.js/dist/zone-patch-electron'; // add zone-patch-electron to patch Electron native API