Javascript 如何在进行多个api调用时选择最新的api调用
我们遇到了一个问题,当多次进行API调用时,UI有时会呈现错误的数据 例子:Javascript 如何在进行多个api调用时选择最新的api调用,javascript,angularjs,api,sendasynchronousrequest,Javascript,Angularjs,Api,Sendasynchronousrequest,我们遇到了一个问题,当多次进行API调用时,UI有时会呈现错误的数据 例子: onPageLoadevent我有5个API调用,我们有日期选择器,可以从中选择日期。当用户尝试更改日期选择器时,所有5个API调用都将刷新数据,假设最初我选择了“最后一天”,页面已加载,现在我更改为“上周”,然后更改为“上个月”,然后又更改为“最后一天”,此时进行了15个异步API调用,并且在UI中呈现最近到达的API调用(因为JS中的异步行为)。angular中是否有任何机制来控制此行为 预期: 我只想在UI中显示
onPageLoad
event我有5个API调用,我们有日期选择器,可以从中选择日期。当用户尝试更改日期选择器时,所有5个API调用都将刷新数据,假设最初我选择了“最后一天”,页面已加载,现在我更改为“上周”,然后更改为“上个月”,然后又更改为“最后一天”,此时进行了15个异步API调用,并且在UI中呈现最近到达的API调用(因为JS中的异步行为)。angular中是否有任何机制来控制此行为
预期:
我只想在UI中显示最新的API调用数据(无论承诺何时得到解决),在上面的示例中,我只想显示最后一天的数据。使用此代码之前的任何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});
}
我处理了一个类似的问题,即在客户端保存最后一个api调用时间戳,并将其与api返回的其他参数一起发送。通过这样做,您将只需要面对这些值并使用最后一个时间戳保留api响应。即使我尝试了这种方法,但问题仍然存在,页面的某些部分可能是最旧的api调用仍然是Ex:我已经进行了1、2、3次api调用,我得到了顺序为1、3、2的响应,然后在UI中显示响应2。当然@BuhBuh am new这里将学习:-)由于我们在每个请求中传递新的超时obj,服务器可能无法利用缓存功能,其他的是如果我有多个api调用(diff URI)那么我们需要维护单独的超时对象吗?是的,每种类型的api调用都有一个不同的超时变量。你可以使用工厂方法来帮助你生成它。至于缓存,我不确定你的确切意思。我不知道你在调用什么api,所以我很难知道你需要什么类型的缓存。