active
在按键上,我用输入搜索参数调用了以下函数,但问题是第二个请求/响应在第一个请求/响应到来之前得到了。
docker info
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
答案 0 :(得分:0)
正如mtkopone在评论中提到的那样,您必须使用去抖动逻辑来执行此操作。即使await / async保证FCFS(先到先服务),它也只能位于同一异步函数中。
在每个keyup事件中,都会创建一个匿名匿名函数的新实例,并且每个等待都保持独立。
您始终必须记住,await / async并没有任何作用
await x = y()
等于
y.then(x => {})
答案 1 :(得分:0)
这是一种解决方法:
let options = {
projection: {
'myList.$': 1
}
}
答案 2 :(得分:0)
对于每个键入,您都将异步发布一个http请求。在这种情况下,您可以为ajax请求设置一个全局变量,如果触发了新请求,则可以中止该多次请求。
例如,
var test = null;
for (var i = 0; i < 10; i++) {
if(test){ test.abort(); test = null }
test = $.post(); // your post request
}
在上面的示例中,我异步触发了10个ajax请求,但仅发布了最后一个请求。其他请求将被中止。
答案 3 :(得分:0)
如果您不再想要响应,则需要取消或忽略请求。如果您未设置超时,则响应可以以任何顺序到达,也可以在任何时间后到达。
最好的解决方案是如果结果不再有用,则取消请求。您有几种选择:
xhr.abort
时取消上一个请求示例:
$("#searchText").on("keyup", async function () {
if (xhr) xhr.abort();
let search = $.trim($(this).val());
let result = await getData({ search: search });
});