You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

transform管道中链式调用Observables时解密账号显示异常问题求助

问题根因
  • 你的代码中unProtectBank是异步接口,你直接对它调用subscribe之后立刻返回了of(bInfo),此时解密请求还没有返回结果,下游map算子拿到的还是原始加密的账号值。你后面控制台能打印出解密后的值是因为异步请求返回后修改了bInfo引用对象的属性,但此时Observable流已经执行完毕,页面已经渲染了原始值,自然不会更新。
  • 代码还存在两处笔误:map算子中打印的bankInfo变量未定义,同时你判断存在性用的是bInfo.data.bankInfo.accno,取加密值又用了bInfo.data.partyBankInfo.accountNumber,要注意字段对应关系避免报错。
修正后代码
public transform(bankId: any, name: string, args?: any): Observable<string> {
  return this.supService.getBankById(bankId).pipe(
    switchMap((bInfo: {
      data: {
        bankInfo: {
          accno: string;
        };
        partyBankInfo: {
          accountNumber: string;
        }
      };
    }) => {
      // 先判断是否存在需要解密的账号
      const encodedAccountNumber = bInfo.data.partyBankInfo?.accountNumber;
      if (encodedAccountNumber) {
        // 把解密接口接入当前流,等解密完成后再往下游传递数据
        return this.supService.unProtectBank(encodedAccountNumber).pipe(
          map((decodedAcc: string) => {
            bInfo.data.bankInfo.accno = decodedAcc;
            return bInfo;
          })
        )
      }
      // 无需要解密的内容直接返回原数据
      return of(bInfo);
    }),
    map((info: {
      data: {
        bankInfo: {
          accno: string;
        };
      };
    }) => {
      console.log("Bank Info==============>", info);
      if (name === 'accountNumber') {
        return info.data.bankInfo.accno;
      }
      // 补全非账号场景的返回值,避免返回undefined
      return '';
    })
  );
}
核心修改点
  • 去掉了对unProtectBank的手动subscribe,把解密请求作为switchMap返回的Observable的一部分,保证解密完成后才会把修改后的bInfo传递给下游map
  • 补全了类型定义和边界返回值,避免出现undefined异常
  • 修正了未定义变量bankInfo的打印错误

内容的提问来源于stack exchange,提问作者Gaurav Matta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 07:09:03