Rxjs:带回来的价值

时间:2018-04-15 10:07:44

标签: angular typescript rxjs

函数是否以正确的方式从Observable获取值并同步返回?

getAllTags = (): Array<TagModel> =>{
        var to_ret = new Array<TagModel>();
        this.ngrxStateList.take(1).subscribe(x=>to_ret = x );
        return to_ret;
    }

或者我应该将值作为承诺返回吗?

注意: observable基本上是ngrx状态的列表。

1 个答案:

答案 0 :(得分:0)

  

函数是否以正确的方式从Observable获取值并同步返回?

尝试从异步事件中同步返回值绝不是一个好主意。无论是Promise还是Observable。

  

或者我应该将值作为承诺返回吗?

你已经有了一个Observable,为什么你会回复一个Promise?只需将其保存为Observable:)

我认为您的工作流程应该是:
  - 提供服务,您可以通过HTTP检索列表   - 等待动作FETCH_LIST,然后调用你的服务,一旦它有结果调度动作FETCH_LIST_SUCCESS,列表作为有效负载,然后你的减速器将列表添加到商店
  - 在您的组件中,只需拥有以下内容:

@Component({...})
export class YourComponent {
  public tags$: TagModel[] = this
    .store
    .select(state => state.select.the.good.slice.of.state);

  constructor (private store: Store<YourStoreType>) {} 
}

并在HTML视图中:

<div *ngIf="tags$ | async as tags; else #noTags">
  Your list has {{ tags.length }} tag{{ tags.length > 1 ? 's': '' }}

  List:
  <div *ngFor="let tag of tags">
    {{ tag.theTagPropertyYouWantToDisplay }}
  </div>
</div>

<div #noTags>
  No tags available yet!
</div>

完全反应的示例:)现在每次要刷新列表时,只需调度另一个FETCH_LIST操作,该操作将被效果捕获,这将获取标记,更新商店并感谢可观察的+ Angular,您的列表将在视图中自动更新。