在AngularJS 1. *我曾经写过这部分代码,刷新auth-token:
public class RealmThingA extends RealmObject {
private RealmThingB realmThingB;
public RealmThingA() {}
public RealmThingB getRealmThingB() { return realmThingB; }
public void setRealmThingB(RealmThingB realmThingB) {
this.realmThingB = realmThingB;
}
}
public class RealmThingB extends RealmObject {
private String value;
public RealmThingB() { }
public String getValue() { return value; }
public void setValue(String value) {
this.value = value;
}
}
如何在Angular 2中使用Observable翻译此代码?
我甚至不知道,因为这不起作用:
...
if (!refreshTokenInProgress) {
refreshTokenInProgress = AuthService.refreshToken();
}
$q.when(refreshTokenInProgress, function () {
refreshTokenInProgress = null;
// re-send requests with error
...
}, function () {
// logout if refresh token rejected
refreshTokenInProgress = null;
...
});
...
RxJs中if (!refreshTokenInProgress) {
refreshTokenInProgress = AuthService.refreshToken().subscribe();
}
Observable.forkJoin([this.refreshTokenInProgress]).subscribe(
success => this.refreshTokenInProgress = null
);
的等值是什么?
答案 0 :(得分:1)
Observable.of(data)类似于$ q.when
您可以在$Q map to 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);
});
}