通过另一个服务调用 HTTP API

Calling HTTP API via another Service

我正在进行一个服务调用,它通过我的组件在内部调用 http 函数,该组件运行得非常好,我确实得到了响应。但是,当我尝试通过相同的服务和另一种方法进行 http 调用时,它不会得到处理并保持在挂起状态。我试图在上面创建类似的代码。谁能建议可能是什么问题?据我了解,在通过服务中的方法拨打电话时,它没有获得订阅者。但是我无法在下面的代码中找到问题。

补充一下,我看到的行为是 http get 调用不会 return observable 本身,并且在通过相同服务完成调用时不会调用 .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);
  }
}

如果您正确注入了 connectivy,请尝试直接在 startMonitoring 中调用 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 转换为 promise。提示,您的 startMonitoring 可能是一个拦截器 :)

没有特定于服务与组件的问题。然而,问题在于调用 HTTP API 的方式。每次 API 调用后,都会返回 observable,但该方法没有时间执行。只有在执行永远不会执行的订阅方法时才会弹出队列。因此,即使调用是正确的,所有调用都会添加到 PENDING 中。