gpt4 book ai didi

Angular 2 - 在调用方法之前使用其他服务的服务

转载 作者:行者123 更新时间:2023-12-02 07:22:51 26 4
gpt4 key购买 nike

我遇到过这种情况。

后端.json

{
"devServer": "http://server1/'",
"proServer" : "http://server2/'",
"use" : "devServer"
}

全局服务.ts

import {Injectable} from '@angular/core';
import {Http, HTTP_PROVIDERS, Response, RequestOptions, URLSearchParams} from '@angular/http';
@Injectable()
export class GlobalService {
constructor(private _http: Http){}
getBackendServer(){
return this.server = this._http.get('./backend.json')
.map((res:Response) => res.json())
}
}

我还有其他服务:search.service.ts

import {Injectable} from '@angular/core';
import {Http, HTTP_PROVIDERS, Response, RequestOptions, URLSearchParams} from '@angular/http';
import {GlobalService} from '../services/global.service';
import 'rxjs/add/operator/map';
@Injectable()
export class SearchService {
server;
constructor( private _http: Http, private gs: GlobalService ) {
this.server = gs.getBackendServer().subscribe(
(data) => {
this.server = data[data.use];
},
(err) => {
console.log(err);
}
);
}
DoGeneralSearch(params:Search){
console.log(this.server);
let options = this.buildOptions(params);
return this._http.get(this.server + 'room/search', options)
.map((res:Response) => res.json())
}
}

我想做的:看起来很明显:我想将有关后端服务器 URL 的信息保存在一个 JSON 文件中 - 全局服务应该返回服务器,以便可以在搜索服务的任何方法中使用.

问题是:DoGeneralSearch() 方法在全局服务能够解决读取 JSON 文件并返回结果的任务之前执行。所以,我有一个 this.server = Subscriber {isUnsubscribed: false, syncErrorValue: null, syncErrorThrown: false, syncErrorThrowable: false, isStopped: false ...} 而不是结果本身。

我需要找到一些方法来防止在解析 this.server 变量后立即执行 DoGeneralSearch 方法。

有什么建议吗?

最佳答案

我认为您可以在应用程序启动时预加载此类提示。为此,您可以利用 APP_INITIALIZER 服务。应用程序将等待返回的 promise 在实际开始之前得到解决。

这是一个示例:

provide(APP_INITIALIZER, {
useFactory: (service:GlobalService) => () => service.load(),
deps:[GlobalService, HTTP_PROVIDERS], multi: true
})

load 方法会像这样:

load():Promise<Site> {
var promise = this.http.get('config.json').map(res => res.json()).toPromise();
promise.then(config => this.devServer = config.devServer);
return promise;
}

然后你可以直接使用devServer(同步)...

有关详细信息,请参阅 github 上的此问题:

关于Angular 2 - 在调用方法之前使用其他服务的服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38127741/

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