在转换管道中使用链接的可观察对象
Using chained observables in transform pipe
我在转换管道中链接可观察对象时遇到问题。我有带加密帐号的银行信息。我要解密那个账号显示
在控制台中显示解密的帐号,但只显示加密的帐号。
请帮忙
public transform(bankId: any, name: string, args?: any): Observable<string> {
return this.supService.getBankById(bankId).pipe(
switchMap(
(bInfo: {
data: {
bankInfo: {
accno;
};
};
}) => {
if (bInfo.data.bankInfo.accno) {
const encodedAccountNumber = bInfo.data.partyBankInfo.accountNumber;
this.supService.unProtectBank(encodedAccountNumber).subscribe(
(data: any) => {
console.log("Unencrypted data======>", data);
bInfo.data.bankInfo.accno = data;
});
}
return of(bInfo);
}),
map(
(info: {
data: {
bankInfo: {
accno;
};
};
}) => {
console.log("Bank Info==============>", bankInfo);
if (name === 'accountNumber') {
return info.data.bankInfo.accno;
}
}
)
);
}
您的第一个 switchMap
操作 returns of(bInfo)
立即完成,您的内部调用没有任何机会完成并更新值。
您需要做的是将 switchMap
的内容替换为:
if (bInfo.data.bankInfo.accno) {
const encodedAccountNumber = bInfo.data.partyBankInfo.accountNumber;
// Do not subscribe here
return this.supService.unProtectBank(encodedAccountNumber).pipe(
map((data: any) => {
console.log("Unencrypted data======>", data);
bInfo.data.partyBankInfo.accountNumber = data;
// Return something out of the Observable
return bInfo;
})
);
} else {
return of(bInfo);
}
这里的关键是 return
声明和删除 subscribe
以支持 pipe
。
return upProtectedBank
可观察并使用 tap
运算符而不是 subscribe
.
switchMap(
(bInfo: {
data: {
bankInfo: {
accno;
};
};
}) => {
if (bInfo.data.bankInfo.accno) {
const encodedAccountNumber = bInfo.data.partyBankInfo.accountNumber;
return this.supService.unProtectBank(encodedAccountNumber).pipe(
map((data: any) => {
console.log("Unencrypted data======>", data);
bInfo.data.bankInfo.accno = data;
return bInfo;
}));
}
return of(bInfo);
}),
我在转换管道中链接可观察对象时遇到问题。我有带加密帐号的银行信息。我要解密那个账号显示
在控制台中显示解密的帐号,但只显示加密的帐号。 请帮忙
public transform(bankId: any, name: string, args?: any): Observable<string> {
return this.supService.getBankById(bankId).pipe(
switchMap(
(bInfo: {
data: {
bankInfo: {
accno;
};
};
}) => {
if (bInfo.data.bankInfo.accno) {
const encodedAccountNumber = bInfo.data.partyBankInfo.accountNumber;
this.supService.unProtectBank(encodedAccountNumber).subscribe(
(data: any) => {
console.log("Unencrypted data======>", data);
bInfo.data.bankInfo.accno = data;
});
}
return of(bInfo);
}),
map(
(info: {
data: {
bankInfo: {
accno;
};
};
}) => {
console.log("Bank Info==============>", bankInfo);
if (name === 'accountNumber') {
return info.data.bankInfo.accno;
}
}
)
);
}
您的第一个 switchMap
操作 returns of(bInfo)
立即完成,您的内部调用没有任何机会完成并更新值。
您需要做的是将 switchMap
的内容替换为:
if (bInfo.data.bankInfo.accno) {
const encodedAccountNumber = bInfo.data.partyBankInfo.accountNumber;
// Do not subscribe here
return this.supService.unProtectBank(encodedAccountNumber).pipe(
map((data: any) => {
console.log("Unencrypted data======>", data);
bInfo.data.partyBankInfo.accountNumber = data;
// Return something out of the Observable
return bInfo;
})
);
} else {
return of(bInfo);
}
这里的关键是 return
声明和删除 subscribe
以支持 pipe
。
return upProtectedBank
可观察并使用 tap
运算符而不是 subscribe
.
switchMap(
(bInfo: {
data: {
bankInfo: {
accno;
};
};
}) => {
if (bInfo.data.bankInfo.accno) {
const encodedAccountNumber = bInfo.data.partyBankInfo.accountNumber;
return this.supService.unProtectBank(encodedAccountNumber).pipe(
map((data: any) => {
console.log("Unencrypted data======>", data);
bInfo.data.bankInfo.accno = data;
return bInfo;
}));
}
return of(bInfo);
}),