我正在进行服务调用,该调用通过我的组件内部调用http函数,该组件运行得很好,并且确实得到了响应。但是,当我尝试通过相同的服务和另一种方法进行http调用时,它不会得到处理,而是保持待处理状态。我试图在上面创建类似的代码。谁能建议这个问题是什么?根据我的理解,通过服务中的方法进行呼叫时,没有吸引到订户。但是我无法在下面的代码中得到问题。
只需添加一下,我看到的行为是http get调用不会返回可观察到的自身,并且通过同一服务完成调用时不会调用.map函数
@Injectable()
export class MyService {
// GET staff by location
getData(): Observable<any> {
// Set content headers
let headers = this.createRequestHeader(localStorage.getString("accessToken"));
// Create a request option
let options = new RequestOptions({ headers: headers });
return this.http.get(url, options)
.map(res => {
return res.json()
})
.catch(this.handleErrors);
}
processQueue(): any {
while (!this.isQueueEmpty()){
this.getData().subscribe((res) => {
this.popQueue();
console.log(res);
});
}}
}
@Component({
selector: "my-component",
moduleId: module.id,
templateUrl: "./my-component.component.html",
styleUrls: ['./my-component.component.css']
})
export class MyComponent implements OnInit, OnDestroy {
ngOnInit(private mySer:MyService): void {
this.mySer.getData().subscribe(
(res) => {
console.log(res);
}
}
答案 0 :(得分:0)
如果正确注入了连接,请尝试直接在startMonitor中调用getData。
startMonitoring() {
connectivity.startMonitoring((newConnectionType: number) => {
switch (newConnectionType) {
case connectivity.connectionType.none:{
console.log("No Connection!");
break;
}
case connectivity.connectionType.wifi:{
while(!this.isQueueEmpty()){
this.service.getData().subscribe((res)=> {console.log(res);});
}
console.log("Connection type using WiFi.");
break;
}
}
});
或者也许将您的processQueue转化为一个承诺。提示,您的startMonitoring可能是拦截器:)
答案 1 :(得分:0)
对于服务vs.组件没有特定的问题。但是,HTTP API的调用方式存在问题。每次API调用之后,都会返回observable,但是该方法没有时间执行。仅在执行未执行的订阅方法时弹出队列。因此,即使通话正确,所有通话也会添加到“待处理”中。