首页 > 解决方案 > 在转换管道中使用链式可观察对象

问题描述

在转换管道中链接可观察对象时遇到问题。我有带有加密帐号的银行信息。我想解密那个帐号并显示。

在控制台中,它显示解密的帐号,但仅显示加密的帐号。请帮忙

    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;
          }
        }
      )
    );
  }

标签: angulartypescriptpipeobservable

解决方案


您的第一个switchMap操作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.


推荐阅读