如何在Angular 2 App中使用RxJS进行连续的ajax请求

时间:2016-09-23 01:25:22

标签: angular rxjs

我想在Angular 2应用程序中连续发出两个http请求,其中第一个ajax调用的结果用于后续的一组ajax调用中。我很难理解如何构建它。

这种安排的目的是随后的ajax调用获取数据,以便向第一次调用中获得的对象集添加细节(新属性)。

我意识到这是1 + N问题的ajax版本,但是我对设计的控制有限。

下面的伪代码是(一个函数体),就像我认为我需要的那样,但可能有一种更清洁的方式。

let finalObservable = Observable.create<viewModel>();

var firstAjax = this._http.request(url1, options)
  .map((rs)=>rs.json());

firstAjax.subscribe((d)=>{
  // d is an array of plain js objects
  let secondAjax: Observable<any>[];
  d.each((item, index)=>{
    // roll item properties and index into url2s query string
    secondAjax.push(_http.request(url2, options);
  });
  // assumption is I can pass an array of observables into forkJoin
  Observable.forkJoin(secondAjax)
    .subscribe((allRs)=>{
      allRs.each((rs, index)=>{
        d[index].newProperty = rs.text()
      });
      // give a value to the final observable
      finalObservable.publish(d);
    });
});

// Observable does not have a value yet, but will get one when the code
// above runs.
return finalObservable;

不确定“.publish”。一旦我知道它是什么,我试图给出一个可观察的值,这比我创建observable的时间晚了。

1 个答案:

答案 0 :(得分:1)

在rx中链接请求的方法是通过abc = abc.replace('\\', '');

这是一个简单的例子:

var pattern = '\\\\';
var re = new RegExp(pattern, 'g');
abc = abc.replace(re, '');

以下是更多细节和演示:http://www.syntaxsuccess.com/viewarticle/angular-2.0-and-http