我正在处理一个类型提前输入组件,我的部分实现是可取消承诺的队列或缓冲区FIFO。
因为键入的速度可能比每个字母上的异步请求快得多,所以我必须取消之前的请求,这样如果前一个版本比当前版本慢,则不会无意中更改状态。
我当前的实现效果很好,但我想知道是否有必要维护队列而不是单个引用。队列永远不会真正增长,一次保留多个承诺,对吗?
//SET SCORE
var bytes:ByteArray = new ByteArray();
bytes.writeUTFBytes("12345678");
EncryptedLocalStore.setItem("score", bytes);
//GET SCORE
var scoreValue:ByteArray = EncryptedLocalStore.getItem("score");
var score:String = scoreValue.readUTFBytes(scoreValue.length);
维护一个值的队列是否有问题?还有这个问题的名字吗?
答案 0 :(得分:0)
由于您的代码在发送新代码之前会立即取消任何正在进行的请求,因此您的队列永远不会包含多个元素。因此,使用队列是无用的,简单的currentRequest
字段足以确保您只能处理最近的请求,无论处理的顺序如何。
预先输入控件的一个常见做法是限制输入事件,即在实际发送AJAX请求之前等待一小段时间进行另一次更改。当用户以快速方式键入多个字母时,这可以避免发送太多请求。
如果您愿意使用反应式编程技术,例如,可以从您的代码中抽象出这两个问题。使用RxJS http://reactivex.io/。
事实上,在下面的RxJS页面上,您会找到一个完全相同的示例:观察输入更改,需要至少2个字符,去抖动,查询Web服务,然后处理结果:https://github.com/Reactive-Extensions/RxJS