Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在进行多个api调用时选择最新的api调用_Javascript_Angularjs_Api_Sendasynchronousrequest - Fatal编程技术网

Javascript 如何在进行多个api调用时选择最新的api调用

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中显示

我们遇到了一个问题,当多次进行API调用时,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,所以我很难知道你需要什么类型的缓存。