gpt4 book ai didi

javascript - 从 rxjs 订阅返回一个函数

转载 作者:行者123 更新时间:2023-12-03 02:20:39 24 4
gpt4 key购买 nike

这是一个关于使用 angular-l10n 翻译模块的问题,但由于这是一个更具体的 typescript 问题,我将其发布在这里。

要动态配置模块(例如设置默认语言),我必须使用以下方法:

load(): Function {
this.localeConfig.language = 'en';
return () => this.l10nLoader.load();
}

localeConfigl10nLoader 均已注入(inject)。

return () => this.l10nLoader.load(); 必须在最后执行才能真正显示配置后的页面。

What i would like to do is to load the language from an api and then set the configuration.

我在返回一个 Observable 的服务中执行此操作,然后在 load() 函数内订阅它。

load(): Function {
this.languageService.getDefaultLanguage().subscribe(
lang => {
this.localeConfig.language = lang;
return ???
}
);
}

The problem is: I don't know how to return this.l10nLoader.load(); at the end of the subscription. If i return it at the end of the function it is done before the subscription ends.

订阅完成后如何返回 Function 类型的内容?

最佳答案

您不能使用 return 执行此操作,因为load()函数是异步的。我建议做的是改变load()返回值Observable<Function>并创建new Observable在里面。

这是代码片段:

load(): Observable<Function> {
return new Observable(observer => {
this.languageService.getDefaultLanguage().subscribe(
lang => {
this.localeConfig.language = lang;
observer.next(this.l10nLoader.load);
observer.complete();
}
);
});
}

之后您可以通过以下方式调用该函数:

load().subscribe(fn => fn());

关于javascript - 从 rxjs 订阅返回一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49176949/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com