Javascript Rxjs在管道中调用另一个订阅,并在管道中更改根订阅的变量
使用另一个订阅,我想设置一个来自根订阅的属性 所以我有这样的订阅:Javascript Rxjs在管道中调用另一个订阅,并在管道中更改根订阅的变量,javascript,angular,rxjs,Javascript,Angular,Rxjs,使用另一个订阅,我想设置一个来自根订阅的属性 所以我有这样的订阅: this.repository.getData(`api/cards/list`) .subscribe( res => { this.data = res as EmployeeCard[]; } ); export class EmployeeCard { id: number; employeeId: number; employeeFullName: string;
this.repository.getData(`api/cards/list`)
.subscribe(
res => {
this.data = res as EmployeeCard[];
}
);
export class EmployeeCard {
id: number;
employeeId: number;
employeeFullName: string;
companyId: number;
cardId: number;
cardNumber: string;
currentSpendingLimit: string;
limitResetDate: Date;
cardUsageStatu: boolean;
cardActiveDays: string;
balance:string;
}
this.repository.getData(`api/cards/list`)
.pipe(
//get card information with cardId (needs another request using EmployeeCard cardId property)
//get balance using card barcode (needs another http request with using barcode)
//set employeecard balance propery
//return employeecard model's balance to subscription
)
.subscribe(
res => {
this.data = res as EmployeeCard[];
}
);
我的员工卡模型如下:
this.repository.getData(`api/cards/list`)
.subscribe(
res => {
this.data = res as EmployeeCard[];
}
);
export class EmployeeCard {
id: number;
employeeId: number;
employeeFullName: string;
companyId: number;
cardId: number;
cardNumber: string;
currentSpendingLimit: string;
limitResetDate: Date;
cardUsageStatu: boolean;
cardActiveDays: string;
balance:string;
}
this.repository.getData(`api/cards/list`)
.pipe(
//get card information with cardId (needs another request using EmployeeCard cardId property)
//get balance using card barcode (needs another http request with using barcode)
//set employeecard balance propery
//return employeecard model's balance to subscription
)
.subscribe(
res => {
this.data = res as EmployeeCard[];
}
);
因此,我必须从另一个api请求中获取余额
。此请求需要卡片条形码
值。我可以通过调用另一个返回卡片信息的请求来获取条形码
。卡片请求应使用carid
值进行调用,该值在EmployeeCard
模型中返回
因此,我的新订阅应如下所示:
this.repository.getData(`api/cards/list`)
.subscribe(
res => {
this.data = res as EmployeeCard[];
}
);
export class EmployeeCard {
id: number;
employeeId: number;
employeeFullName: string;
companyId: number;
cardId: number;
cardNumber: string;
currentSpendingLimit: string;
limitResetDate: Date;
cardUsageStatu: boolean;
cardActiveDays: string;
balance:string;
}
this.repository.getData(`api/cards/list`)
.pipe(
//get card information with cardId (needs another request using EmployeeCard cardId property)
//get balance using card barcode (needs another http request with using barcode)
//set employeecard balance propery
//return employeecard model's balance to subscription
)
.subscribe(
res => {
this.data = res as EmployeeCard[];
}
);
我如何使用Rxjs实现这一点
感谢SwitchMap用例(可能有内部映射?)
SwitchMap用例(可能有内部映射?)
您必须将
switchMap
与选择器函数参数一起使用
函数getData(){
getEmpData()
.烟斗(
开关图(
emp=>getBalanlanceInfo(emp.Cardd),
(环境管理计划、余额信息)=>{
/**
*开关映射的选择函数变化
*使用源和内部可观察值执行逻辑
*/
emp.balance=balanceInfo.balance;
返回emp;
}
)
)
.订阅(emp=>{
控制台日志(emp);
//在这里执行您的逻辑
});
}
您可以在Stackblitz中找到完整的示例。可以找到有关switchMap的更多信息。您必须将
switchMap
与选择器函数参数一起使用
函数getData(){
getEmpData()
.烟斗(
开关图(
emp=>getBalanlanceInfo(emp.Cardd),
(环境管理计划、余额信息)=>{
/**
*开关映射的选择函数变化
*使用源和内部可观察值执行逻辑
*/
emp.balance=balanceInfo.balance;
返回emp;
}
)
)
.订阅(emp=>{
控制台日志(emp);
//在这里执行您的逻辑
});
}
您可以在Stackblitz中找到完整的示例。有关switchMap的更多信息,请参见。switchMap操作员这是否回答了您的问题@KurtHamilton不这不是开关地图操作员这能回答你的问题吗@KurtHamilton不,这不仅仅是选择器功能的参考。我是它的粉丝,但是RXJS团队已经不赞成它了,并且不止一次地重新引入了它。从他们的突发奇想中证明自己的未来,并使用一个内部映射功能。我不认为它在中已被弃用,而且我已经使用了一年多了。此外,有不止一种解决问题的方法,在我看来,这种方法比内部映射更优雅,也更容易阅读。rxjs 6.0.0发行说明:
switchMap | switchMapTo:switchMap和switchMapTo不再接受resultSelector参数,要获得相同的功能,请结合使用switchMap和map
。。。最近,他们(悄悄地)在某个时候重新引入了它。这是一个更好的代码,但他们倾向于快速而松散地进行破坏性的更改。为了省去你的麻烦,我迁移了一个大量使用结果选择器的整个应用程序。好吧,但我使用的是2019年4月发布的这篇文章当天的变体。您共享的变更日志来自2018年。这篇文章是4年前在rxjs 5之前写的,现在仍然使用更旧的语法。它于2019年4月更新。结果选择器存在多年,在v6中被弃用,然后在大约一年前的某个时候重新引入,没有任何解释或宣布。他们没有给出任何迹象表明这是否仅仅是一个向后兼容的东西,或者它是否会继续存在。它可以完全删除在v7时,他们取消了最后的rxjs兼容。。。你想怎么做就怎么做,但我会避免的。rxjs指南建议内部地图功能仍然只是选择器功能的参考。我是它的粉丝,但是RXJS团队已经不赞成它了,并且不止一次地重新引入了它。从他们的突发奇想中证明自己的未来,并使用一个内部映射功能。我不认为它在中已被弃用,而且我已经使用了一年多了。此外,有不止一种解决问题的方法,在我看来,这种方法比内部映射更优雅,也更容易阅读。rxjs 6.0.0发行说明:switchMap | switchMapTo:switchMap和switchMapTo不再接受resultSelector参数,要获得相同的功能,请结合使用switchMap和map
。。。最近,他们(悄悄地)在某个时候重新引入了它。这是一个更好的代码,但他们倾向于快速而松散地进行破坏性的更改。为了省去你的麻烦,我迁移了一个大量使用结果选择器的整个应用程序。好吧,但我使用的是2019年4月发布的这篇文章当天的变体。您共享的变更日志来自2018年。这篇文章是4年前在rxjs 5之前写的,现在仍然使用更旧的语法。它于2019年4月更新。结果选择器存在多年,在v6中被弃用,然后在大约一年前的某个时候重新引入,没有任何解释或宣布。他们没有给出任何迹象表明这是否仅仅是一个向后兼容的东西,或者它是否会继续存在。它可以完全删除在v7时,他们取消了最后的rxjs兼容。。。你想怎么做就怎么做,但我会避免的。rxjs指南仍然建议使用内部映射功能