0

ここにコード:

@Injectable()
export class ProjectService {
  create$: Rx.Subject<Response> = new Rx.Subject();
  _create: Rx.Observable<Response> = this.create$.asObservable();
  newProject: Rx.Subject<ProjectInfo> = new Rx.Subject();
  get$: Rx.Subject<any> = new Rx.Subject();
  _get: Rx.Observable<any> = this.get$.asObservable();

  constructor(public _http: Http, public option: HeaderWithToken) {
    this._create = this.newProject.flatMap(project => {
      console.log("create",project);
      return this._http.post(baseURL + "/project",
               JSON.stringify(project), this.option.Option);
    });

    this._get = this._http
      .get(baseURL + "/project", this.option.Option)
      .do(x=>{
        console.log("to get",x);
      })
      .map(res => res.json());

    this._create
          .map(x=>x.json())
          .filter(res=>res.status==200)
          .subscribe(this.get$);

    this._get.subscribe(x => {
      console.log("get:", x);
    })
  }

  addProject(project: ProjectInfo) {
    this.newProject.next(project);
  }

  getProject() {
    return this._get;
  }
}

ストリームが 1 として機能することを願っています。 addProject を呼び出したとき => 値を発行 => ポスト リクエストをトリガー => ポスト レスポンス 200 が get リクエストを続行したとき (_get stream) => get$ ストリームを他の場所でサブスクライブできます。すべての最新データ。

実際:投稿は成功しましたが、取得リクエストには入りませんでした。コードに問題があるようです

    this._create
    .map(x=>x.json())
    .filter(res=>res.status==200)
    .subscribe(this.get$); 

助けてください!

4

1 に答える 1

0

私はそれを機能させます。

@Injectable()
export class ProjectService {

  _create: Rx.Observable < Response > = new Rx.Observable();
  newProject: Rx.Subject < ProjectInfo > = new Rx.Subject();
  _get: Rx.Observable < any > = new Rx.Observable();
  res$: Rx.Observable < any > = new Rx.Subject().asObservable();

  constructor(public _http: Http, public option: HeaderWithToken) {

    //any new value into the newProject will deliver to post and save as create stream
    //to check the status code in the create stream to close dialog
    this._create = this.newProject
      .flatMap(
        project => {
          return this._http
            .post(
              baseURL + "/project",
              JSON.stringify(project),
              this.option.Option
            );
        });

    this.res$ = this._create
      .filter(res => res.status == 200)
      .flatMap(x => {
        DialogServices.getRef()
          .then(x => {
            x.dispose();
          })
        return this._get;
      })

    //For get all project from DB, will return an array of projectInfo
    this._get = this._http
      .get(baseURL + "/project", this.option.Option)
      .map(res => res.json());

    this.res$.subscribe(x => {
      cacheProject = x;
      console.log("cache", x, cacheProject);
      getAllProjects.next(cacheProject);
    })
  }
  addProject(project: ProjectInfo) {
    this.newProject.next(project);
  }
}

于 2016-03-25T12:32:36.620 に答える