通过其他服务调用HTTP API

时间:2018-08-07 11:03:52

标签: angular typescript nativescript angularjs-service angular2-nativescript

我正在进行服务调用,该调用通过我的组件内部调用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);
  }
}

2 个答案:

答案 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,但是该方法没有时间执行。仅在执行未执行的订阅方法时弹出队列。因此,即使通话正确,所有通话也会添加到“待处理”中。