我的应用程序执行查询代码。 用户输入3947代码。
对于每种类型,查询在这种情况下有四个查询。 但由于请求是异步的,因此有时最后一个到达其他请求。 因此,最后返回的记录是394而不是3947
如何确保最后一次约会到最后?
listeners: {
change: function (sender, newValue, oldValue, eOpts) {
loadData();
}
}
答案 0 :(得分:1)
以简化的方式,您可以忽略所有请求,并以这种方式仅执行最后一次:
listeners: {
change: function (sender, newValue, oldValue, eOpts) {
if (call_request) clearTimeout(call_request);
call_request = setTimeout(loadData, 750);
}}
答案 1 :(得分:0)
使用extjs非常简单,您可以使用缓冲区。例如,以下代码将创建500毫秒的缓冲间隔,然后键入新字母以等待触发'更改'事件。所以,如果你输入的速度足够快,那么在你完成之前它不会发生变化事件。您可以根据需要使用缓冲区数量
listeners: {
change: {
buffer: 500,
fn: function (sender, newValue, oldValue, eOpts) {
loadData();
}
}
编辑:我再次阅读你的帖子,我可能会被误解。所以我正在为另一个案件提供解决方案,这可能是你的问题。如果您要为每个键入的号码发送AJAX请求,因为它是异步的,您无法知道哪些号码会在何时到达。但是你肯定会通过一些简单的代码改变来阻止它。例如,你可以使用promises,这应该有效:
// lets define loadData (just an example)
var job = new Promise(function(resolve, reject){
resolve();
});
var loadData = function(){
return new Promise(function(resolve, reject){
// do your job and when it finishes(can be async), call resolve
// ...
resolve();
});
};
// listener
change: function(){
job = job.then(function(){
return loadData();
});
}