我们正在根据用户输入发出HTTP请求。因此,每次用户输入字符时,都会启动HTTP请求。我们遇到的问题是:用户将输入ABC
,然后输入ABCD
。 ABCD
会在ABC
之前回复。因此,显示的结果与ABCD
不匹配。它们匹配ABC
。
以下是我们目前的解决方案。我们拒绝所有尚未解决的承诺。在我看来,这似乎是一种反模式。有没有一种方法可以带来更好的性能,可读性或更好的功能?
function cancelPreviousSearchRequest(previousSearchRequest) {
if(previousSearchRequest) {
previousSearchRequest._defer.resolve();
}
}
function getPVendors(typed, subTypes) {
var pVendorsDefer = $q.defer();
var pVendorsPromise = pVendorsDefer.promise;
$http.get(SERVLET_CONTEXT + RestConstants.masterDataIntegrationSearchByPvendorName(typed, subTypes), {timeout: pVendorsPromise})
.success(function(data){
var result = _.get(data, '_embedded.paymentVendors', []);
pVendorsDefer.resolve(result);
})
.error(function(data){
if(data != null) {
growl.error("Service error occurred while retrieving Payment Vendors");
}
pVendorsDefer.reject();
});
pVendorsPromise._defer = pVendorsDefer;
return pVendorsPromise;
}
评论中的注释:
我们正在进行辩护:ng-model-options="{ debounce: 150 }"