【问题标题】:Throttle service with multiple, independant callers具有多个独立调用者的节流服务
【发布时间】:2018-06-21 13:39:54
【问题描述】:

我想确保给定的 API 调用受到限制,以便在给定的时间间隔内,只触发一个请求,而其他受限制的请求等待并接收主动触发的请求的结果

示例

const generateReport = (args) => client.get(...)

const generateReportA = (argsForA) =>
    generateReport(argsForA).then(saveReportSomewhere)

const generateReportB = (argsForB) =>
    generateReport(argsForB).then(saveReportSomewhere)

const generateReportC = (argsForC) =>
    generateReport(argsForC).then(saveReportSomewhere)

如果我们接着运行下面的语句

generateReportA(...).then(console.log) // should log result of C
generateReportB(...).then(console.log) // should log result of C
generateReportC(...).then(console.log) // should log result

紧接着,我只想触发与generateReportC 关联的请求,我希望generateReportAgenerateReportB 都接收并处理generateReportC 的结果。

最后,generateReport 应该被调用一次,saveReportSomewhere 应该被调用 3 次,每次都有来自generateReportC 的结果

这可能吗?

【问题讨论】:

    标签: rxjs rxjs5


    【解决方案1】:

    这将触发C 请求获取结果并保存它,然后同时触发AB 与来自C 的结果并在每次发出后立即保存结果。

    generateReportC.pipe(
        tap(cResult => saveReportSomewhere(cResult)),
        mergeMap(cResult => merge(generateReportA(cResult), generateReportB(cResult))),
        tap(result => saveReportSomewhere(result))
    ).subscribe();
    

    【讨论】:

      猜你喜欢
      • 2012-05-04
      • 2019-01-23
      • 2016-02-03
      • 2017-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多