时间:2016-08-30 04:52:09

标签: http angular observable

我在这里向社区提出的第一个问题! 我正在开发一个以下列方式与API通信的应用程序

第1步:创建请求选项,添加请求有效内容 - >向API发布请求

API使用请求ID进行响应

第2步:更新请求选项,将请求ID作为有效负载发送 - >向API发布请求

最终回复:response.json

现在最终响应可能需要一些时间,具体取决于请求的数据。 这平均可以在4到20秒之间。

我如何使用observable链接这些请求,我尝试使用switchmap并失败(如下所示)但不知道如何添加间隔? 是否每4秒轮询一次并取消订阅响应是否可行?在上述背景下如何做到这一点?

EDIT1: 最终目标:我是角色和学习可观察者的新手,我希望了解前进的最佳方式是什么?在这种背景下链接可观察的帮助?即在初始响应之后有某种间隔并使用flatMap 或者使用间隔轮询来检查报告是否准备就绪。

这是我到目前为止所拥有的

导出类reportDataService {     构造函数(private _http:Http){}

headers: Headers;
requestoptions: RequestOptions;
payload: any;
currentMethod: string;


theCommonBits() {
     //create the post request options 
    // headers, username, endpoint
    this.requestoptions = new RequestOptions({
        method: RequestMethod.Post,
        url: url,
        headers: newheaders,
        body: JSON.stringify(this.payload)
    })
    return this.requestoptions;
}
// report data service
reportService(payload: any, method: string): Observable<any> {
    this.payload = payload;
    this.currentMethod = method;
    this.theCommonBits();
    // fetch data 
    return this._http.request(new Request(this.requestoptions))
        .map(this.extractData)
        .catch(this.handleError);
}

private extractData(res: Response) {
    let body = res.json();
    return body || {};
}

private handleError(error: any) {
        let errMsg = (error.message) ? error.message :
        error.status ? `${error.status} - ${error.statusText}` : 'Server error';
    console.error(errMsg); // log to console instead
    return Observable.throw(errMsg);
}
我的组件中的

  fetchData() {
    this._reportService.reportService(this.payload, this.Method)
           .switchMap(reportid => {
            return this._reportService.reportService(reportid, this.newMethod)
        }).subscribe(
        data => {
            this.finalData = data;
            console.info('observable', this.finalData)
        },
        error => {
            //console.error("Error fetcing data!");
            return Observable.throw(error);
        }
        );
}

1 个答案:

答案 0 :(得分:0)

如何在服务中使用Promise而不是Observable,以及组件中的.then()方法。您可以链接尽可能多的.then(),以便链接它们之间的操作。