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

WLOLBLOK接口被重复调用3次,如何调整为仅单次调用?

重复调用根因

你当前的逻辑里一共主动触发了3次完全相同的接口请求:

  • 第1次:initiate 方法执行时调用 getBlocked() 触发
  • 第2次:getBlocked() 的订阅回调中调用 getBlocage() 触发
  • 第3次:getBlocage() 后面的 concatMap 逻辑中又调用了一次 getBlocage() 触发

三个请求调用的都是同一个WLOLBLOK接口、入参完全一致,属于不必要的重复调用。

优化方案

只需要调用1次接口,拿到响应结果后同时执行两个数据处理逻辑即可,修改逻辑如下:

1. 修改 file.ts 中的 initiate 方法

直接调用一次接口,替换原来的链式多次调用逻辑,多余的getBlocked、getBlocage方法如果没有其他地方使用可以直接删除:

initiate() {
    // 先开启加载态
    this.spinners.blockDetails = true;
    // 仅调用一次接口
    this.api.getInstrumentBlockDetail(this.currentPortfolio, this.svm)
        .subscribe({
            next: (response) => {
                // 一份响应同时处理两个业务逻辑
                this.prepareDataForBlocked(response);
                this.prepareDataForBlocage(response);
            },
            error: (err) => {
                console.error('请求失败', err);
                this.spinners.blockDetails = false;
            },
            complete: () => {
                // 请求完成关闭加载态
                this.spinners.blockDetails = false;
            }
        })
}

2. 可选:如果该接口在其他地方还有多处调用,可以在service层加缓存

修改file.service.ts,增加请求缓存,避免重复发起相同请求:

import { shareReplay } from 'rxjs/operators';

// 定义缓存变量
private blockDetailCache: Observable<any[]> | null = null;

getInstrumentBlockDetail(portfolioID, svm) {
    // 存在缓存直接返回缓存结果
    if (this.blockDetailCache) {
        return this.blockDetailCache;
    }
    const payload = {
        "HEADER": this.sh.getHeaderForRequest(),
        "CUSTOMER": {
            "REFERENCE": portfolioID,
            "ID": "",
            "INTITULE1": "",
            "INTITULE2": "",
            "ACCESS": 0,
            "SERVICE": 0,
            "DEFAULTPTF": 0
        },
        "SVM": svm
    }
    // 发起请求并缓存结果
    this.blockDetailCache = this.http.post<any[]>(this.getBaseUrl() + `/WLOLBLOK`, payload)
        .pipe(shareReplay(1));
    return this.blockDetailCache;
}

// 如果需要切换投资组合/标的时清理缓存,可以新增清理方法
clearBlockDetailCache() {
    this.blockDetailCache = null;
}

修改完成后,接口就只会被调用1次,同时不影响原有业务逻辑的执行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:27:02