Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Http 带区间的RxJS观测值链_Http_Angular_Observable - Fatal编程技术网

Http 带区间的RxJS观测值链

Http 带区间的RxJS观测值链,http,angular,observable,Http,Angular,Observable,我向这里的社区提出的第一个问题! 我正在开发一个应用程序,它通过以下方式与API通信 步骤1:创建请求选项,将请求有效负载-->Post请求添加到API API使用请求ID进行响应 第2步:更新请求选项,将请求ID作为有效负载发送-->将请求发布到API 最终响应:response.json 现在,根据请求的数据,最终响应可能需要一些时间。 这平均需要4到20秒的时间 我如何使用可观察对象链接这些请求,我已经尝试使用switchmap,但失败了(如下所示),但不确定如何添加间隔? 每4秒钟进行一

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

步骤1:创建请求选项,将请求有效负载-->Post请求添加到API

API使用请求ID进行响应

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

最终响应:response.json

现在,根据请求的数据,最终响应可能需要一些时间。 这平均需要4到20秒的时间

我如何使用可观察对象链接这些请求,我已经尝试使用switchmap,但失败了(如下所示),但不确定如何添加间隔? 每4秒钟进行一次轮询并取消订阅响应是可行的解决方案吗?在上述情况下,这是如何做到的

Edit1: 最终目标:我不熟悉角度观测和学习可观测,我希望了解什么是最好的前进方向。。在这种情况下,链接可观察性有帮助吗?i、 e初始响应后,有一定的间隔,并使用平面图 或者使用带间隔的轮询检查报告是否准备就绪

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

导出类reportDataService{ 构造函数(私有http:http){}


在您的服务中使用Promise而不是Observable,在组件中使用.then()方法怎么样?您可以链接尽可能多的.then()因为你想在它们之间链接操作。

我对你的问题似乎很不清楚。你想实现什么?你只是需要链接两个api调用,还是需要定期执行?谢谢你的时间!我已经添加了我的最终目标。我正在试着找出最好的前进方式。使用链接来实现这一点或任何其他方法h、 。我只需为每个新请求调用此服务你好!我没有尝试在angular 2中使用promise,我在angular 1中使用了一个setTimeout函数,它将在第二次api调用之前等待8秒(但是,如果负载复杂,有时会失败)。想知道observer是否是一种更好的方法吗?您不想在第一个API响应后调用第二个API吗?如果是,您可以在调用服务时使用.then()函数。但是,如果您只想在某个时间后执行操作:从“rxjs/Rx”导入{Observable};然后是Observable.timer(8000)(你必须订阅这个计时器)谢谢!我来试试这个。
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);
        }
        );
}