【问题标题】:How to pick latest api call when multiple api call were made进行多个 api 调用时如何选择最新的 api 调用
【发布时间】:2018-07-06 10:36:02
【问题描述】:

当重复进行多个 API 调用时,我们遇到了一个问题,UI 有时会呈现错误的数据。

示例:

onPageLoad 事件我有 5 个 API 调用,我们有日期选择器,我们可以从中选择日期。当用户尝试更改日期选择器时,将进行所有 5 个 API 调用以刷新数据,假设最初我选择了最后一天并加载了页面,现在我更改为上周然后一个月,然后又回到最后一天,现在有 15 个异步进行了 API 调用,并且在 UI 中,我们渲染了最近到达的任何 API 调用(因为 JS 中的异步行为)。是否有任何角度机制来控制这种行为。

预期:

在上面的示例中,我只想在 UI 中显示最新的 API 调用数据(无论何时解决承诺)我只想显示最后一天的数据。

【问题讨论】:

  • 我处理了一个类似的问题,保存最后一个 api 调用时间戳客户端并将其与其他参数一起发送,以便由 api 返回。通过这样做,您只需要面对这些值并将 api 响应与最后一个时间戳保持一致。
  • 即使我尝试了这种方法,但问题仍然存在,页面的某些部分可能仍然是最旧的 api 调用 例如:我已经进行了 1、2、3 api 调用,我得到了响应order as 1, 3, 2 然后在 UI 中显示响应 2。
  • 当然@BuhBuh 我是新来这里的人会学习 :-)

标签: javascript angularjs api sendasynchronousrequest


【解决方案1】:

使用此代码之前的任何 api 调用都将被拒绝。这意味着只有最后一次调用才能解决。

var timeout;

function callApi() {
    // Cancel any previous api call:
    timeout && timeout.resolve();

    // Create a new timeout:
    timeout = $q.defer();

    // Make the api call, passing in the timeout:
    return $http.get('/api', {timeout: timeout.promise});
}

【讨论】:

  • 由于我们在每个请求中都传递了新的超时 obj,因此服务器可能无法利用缓存功能,另一件事是,如果我有多个 api 调用(diff URI),那么我们需要维护单独的超时对象?
  • 是的,每种类型的 api 调用都有不同的超时变量。您可以使用工厂方法来帮助您生成它。至于缓存,我不确定您的确切意思。我不知道你在调用什么 api,所以我很难知道你需要什么样的缓存。
猜你喜欢
  • 2021-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-16
  • 2012-07-31
  • 2019-03-10
  • 2018-02-06
相关资源
最近更新 更多