在 Angular 中订阅可观察对象时如何避免竞争条件

Ben*_*min 1 race-condition typescript angular2-observables angular

我是 Angular 的新手,正在编写这段代码。

  onUpdate(relation: RelationTypes) {
    let userId: number;
    this.assigneeId$.subscribe(assigneeId => userId = assigneeId);

    let customerId: string;
    this.customer$.subscribe(customer => customerId = customer.email);

    this.store.dispatch(actions.changeUserRelation({
      payload: {
        'userId': userId,
        'customerId': customerId,
        'relation': relation
      }
    }));
  }
Run Code Online (Sandbox Code Playgroud)

customerId$assigneeId$可观察量。我知道这里可能存在竞争条件,我很想消除这种情况。

所以我在想这样的事情。


     this.subscription.add(this.assigneeId$.subscribe(assigneeId => {
       this.customer$.subscribe(customer => {
         this.store.dispatch(actions.changeUserRelation({
           payload: {
             'userId': assigneeId,
             'customerId': customer.email,
             'relation': relation
           }
         }));
       });
     }));
Run Code Online (Sandbox Code Playgroud)

但这不起作用。也许你可以帮助我理解并解决问题。提前致谢。

Fel*_*lix 5

RxJS 提供不同的运算符来组合可观察量。我认为在这种情况下你可以使用combineLatest,像这样:

combineLatest([this.assigneeId$, this.customer$]).subscribe(([assigneeId, customer]) => 
    this.store.dispatch(actions.changeUserRelation({
       payload: {
         'userId': assigneeId,
         'customerId': customer.email,
         'relation': relation
       }
    }));
);
Run Code Online (Sandbox Code Playgroud)