node.js - 在 Angular/w Electron 中在哪里执行初始化函数?

标签 node.js angular electron

我正在使用 Angular 和 Electron,我有一个 Preferences我想初始化的对象( Preferences.init() )需要在 之前执行执行任何其他代码 . Angular 或 Electron 是否有应该执行此类初始化代码的特定位置?
目前我把它放入AppComponent的构造函数中但由于该函数是异步的,我有一个竞争条件,有时数据在需要时没有正确初始化。任何帮助或建议都非常感谢!谢谢!

最佳答案

您可以使用 APP_INITIALIZER 依赖注入(inject) token 做这样的事情:
假设您创建了提供程序

@Injectable()
export class ThingProvider {

    private thing: Thing = null;

    constructor(private http: Http) {
    }

    public getThing(): Thing {
        return this.thing;
    }

    load() {
        return new Promise((resolve, reject) => {
            this.http
                .get('https://my-api.com/thing')
                .map(res => res.json())
                .subscribe(response => {
                    this.thing = response['value'];
                    resolve(true);
                })
        })
    }
}
然后,在您的 app.module.ts文件:
export function thingsProviderFactory(provider: ThingProvider) {
  return () => provider.load();
}
最后,在同一个文件中:
@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    HttpModule
  ],
  providers: [
    ThingProvider, 
    { provide: APP_INITIALIZER, useFactory: thingsProviderFactory, deps: [ThingProvider], multi: true }
  ],
  bootstrap: [AppComponent]
})
export class AppModule { }

关于node.js - 在 Angular/w Electron 中在哪里执行初始化函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63965871/

相关文章:

node.js - 通过Node.js子进程区分bash和sh

html - Angular 4 : Master page with side bar concept

angular - 如何在 Angular 2 的元素上设置属性?

node.js - Electron Js : Unable to install using . msi 因为路径太长

javascript - Uncaught ReferenceError : dialog is not defined

javascript - Node : Would App Run Faster if Freeze Objects?

javascript - 在javascript中 promise 解决和拒绝

node.js - 在Mac上运行 'bower install'

javascript - 延迟加载时取消页面请求

electron - 错误: useForm must be used inside of a <Form> component - Electron