2017-08-15 9 views
0

他のオブジェクトコレクションに新しいオブジェクトを追加するフローを実行します。だから最初に私はいくつかドメインの関連するものを言うことをやらなければならない。ngのエフェクトを使って作業しているときに、ストリームの代わりに未定義

私はバックエンドにオブジェクトを送信しています。コールバックを受信すると、私は別のエフェクトが動作するストアにアンソエーサーのアクションを送信します。

このアクションでは、新しいペイロードでバックエンドコントローラを再度呼び出す必要があります。フローが終了するはずです。この問題は、バックエンドの呼び出し時に発生します。そこイムrecieving次のエラー:

 from update project effect 
    project.effects.ts:52 {projectId: "5980ea8390dfb5285402e18b", userId: "[email protected]", drawings: Array(2), projectName: "Test pro"} 
    project.service.ts:37 

z update project service 
    project.service.ts:38 {projectId: "5980ea8390dfb5285402e18b", userId: "[email protected]", drawings: Array(2), projectName: "Test pro"}drawings: (2) [{…}, Drawing]projectId: "5980ea8390dfb5285402e18b"projectName: "Test pro"userId: "[email protected]"__proto__: Object 
    core.es5.js:1084 

ERROR TypeError: You provided 'undefined' where a stream was expected. You can provide an Observable, Promise, Array, or Iterable. 
     at Object.subscribeToResult (subscribeToResult.js:73) 
     at 

イムアプリ(例えば、ログイン)の他の部分に似フローを使用して、それがうまく動作。コードの下:

updateProject(project: Project): Observable<any> { 
    console.log('z update project service') 
    console.log(project) 
    return this.http.put(`${this.projectUrl}/${project.projectId}`, project) 
     .map(response => response.json()); 
    } 

けど大丈夫動作し、他のサービスのようにその同じ:

@Effect() addNewDrawing = this.actions 
    .ofType(ProjectActions.ADD_NEW_DRAWING) 
    .map(toPayload) 
    .withLatestFrom(this.store.select(getProject)) 
    .switchMap(([payload, project] : [AddDrawingCommand, Project]) => 
     this.uploadService.upload(payload.file) 
     .mergeMap((result:any) : any => { 
      project.drawings.push(new Drawing(payload.drawingName, result.drawingUrl, 0)); 
      console.log(payload) 
      console.log('------------------') 
      console.log(result) 
      console.log(project) 
      console.log('------------------') 
      return this.store.dispatch(new UpdateProject(project)); 
     })); 

    @Effect() updateProject = this.actions 
    .ofType(ProjectActions.UPDATE_PROJECT) 
    .map(toPayload) 
    .switchMap(payload => { 
     console.log('from update project effect'); 
     console.log(payload); 
     return this.projectService.updateProject(payload) 
     } 
    ); 

すべてがprojectServiceを呼び出すときに爆破するようです。

+2

私は( 'this.store.dispatchを考えていない)' https://github.com/ngrx/store/blob/master/src/storeを参照して、観察可能を返します.ts#L35 – martin

+0

あなたの答えは正しい軌道に乗りこんでいました。その場合、最終的に私はマージマップを落としました。あなたがupvoteを取得したい場合は、回答を投稿してください – filemonczyk

答えて

関連する問題