簡體   English   中英

RxJs:$ q。在angular2中模擬時

[英]RxJs: $q.when analog in angular2

在AngularJS 1. *中,我曾經編寫這部分代碼,以刷新auth-token:

...

if (!refreshTokenInProgress) {
  refreshTokenInProgress = AuthService.refreshToken();
}


$q.when(refreshTokenInProgress, function () {
  refreshTokenInProgress = null;

  // re-send requests with error
  ...
}, function () {
  // logout if refresh token rejected

  refreshTokenInProgress = null;

  ...
});

...

如何在Angular 2中使用Observable轉換此代碼?

我什至不知道,因為這行不通:

if (!refreshTokenInProgress) {
  refreshTokenInProgress = AuthService.refreshToken().subscribe();
}

Observable.forkJoin([this.refreshTokenInProgress]).subscribe(
  success => this.refreshTokenInProgress = null
);

在RxJs中, $q.when 。等於多少?

Observable.of(data)與$ q.when類似

您可以在$ Q映射到RxJS上閱讀有關將$ q 映射到RxJS的文章。

這是真實代碼的示例:

spyOn(myService, 'getData').and.returnValue(Observable.of([{id: 1}, {id: 2}]));

或稍微復雜一點:

   deleteRole(role: Role) {
Observable.fromPromise(this.confirmDialogService.open(DELETE_ROLE_TITLE, DELETE_ROLE_CONFIRM_BODY({name: role.name})))
  .switchMap(result => result ? Observable.of(result) : Observable.empty())
  .switchMap(() => this.rolesService.getUsersForRole(role.id))
  .switchMap(({elements: users}) => {
    return _.isEmpty(users) ?
      Observable.of(users) :
      Observable.fromPromise(
        this.confirmDialogService.open(ROLE_IN_USE_TITLE,
          ROLE_IN_USE_CONFIRM_BODY({users: users.map(({firstName, lastName}) => `${firstName} ${lastName}`)}),
          {hideCancelButton: true})
      ).switchMap(() => Observable.empty());
  })
  .switchMap(() => this.rolesService.deleteRole(role))
  .subscribe(data => {
      this.toastr.success(`Role '${role.name}' is deleted`, 'Success');
      this.findallRoles(); //Refresh role grid;
      this.roleDeleted.emit();
    },
    error => {
      this.toastr.error(error, 'Error (rolesService.delete)!', {dismiss: 'click'});
      console.error(error);
    });

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM