gpt4 book ai didi

java - 如何避免表加载过时的搜索查询

转载 作者:行者123 更新时间:2023-12-01 19:05:55 25 4
gpt4 key购买 nike

我有一个 Web 应用程序,它通过 REST 端点执行简单的搜索。每个搜索都有 0 个或多个参数。如何防止这种情况发生?

User submits search request "A"
Before allowing "A" to return they modify their request and submit a new search request "B"

此时,用户希望看到“B”的结果,但根据搜索返回的顺序,可能会显示其中之一。如何防止搜索结果“A”填充表格?

我正在考虑从搜索词创建一个哈希,将哈希与搜索请求一起发送,并将返回值中的哈希与最近提交的搜索条件的哈希进行比较,并且仅在以下情况下加载请求结果:哈希值匹配。

如果之前有人问过这个问题,但我找不到它,我深表歉意。我正在使用 Angular 1.4 UI 和 Java/Spring 后端。我认为这可能是既定模式的常见问题。

最佳答案

您可以修饰 $http 并向返回的 Promise 添加 abort 方法。这将允许您检查实现中的 Promise 并使用 abort() 取消之前的 Promise 请求(下面的文档 block 中的实现示例)。

;(function(angular, undefined) {

angular.module('app.appConfigs')
.config(httpDecoratorConfig);

function httpDecoratorConfig($provide) {
$provide.decorator('$http', decorateHttpWithAbort);
}

/**
* decorate $http response promise with an abort function.
* use this on destroy where you want to abort the outstanding request made on
* a page before leaving the page.
*
* @example
var requestPromise = $http(reqConfig).then(...).catch(...).finally(...);

$onDestroy() {
requestPromise.abort();
}
*/
function decorateHttpWithAbort(_, $q, $delegate) {
var originalHttpService = $delegate;

function newHttpServiceConstructor(requestConfig) {
var canceller = $q.defer();
var proxyRequest = $q.defer();
var onAbortCallback = angular.noop;

// adding abortFn into request promise
proxyRequest.promise.abort = function abortFn() {
canceller.resolve();
};

// by using onAbort capture the callback function which will be called
// when the request is aborted, use this to perform cleanups.
proxyRequest.promise.onAbort = function onAbortFn(callback) {
onAbortCallback = callback;
return this;
};

// adding request canceller promise in the original request config.
requestConfig.timeout = canceller.promise;

originalHttpService(requestConfig).then(
function onSuccess() {
proxyRequest.resolve.apply(this, arguments);
},
function onError(resp) {
// don't resolve the abort response with error instead call provided
// on abort callback to give user a change to handle abort case.
// natively angular abort is resolved with error.
if (resp.status === -1) {
onAbortCallback();
return;
}

proxyRequest.reject.apply(this, arguments);
},
function onNotification() {
proxyRequest.notify.apply(this, arguments);
}
);

return proxyRequest.promise;
}

// inherit all derived methods from original $http like $get, $put etc
_.assign(newHttpServiceConstructor, originalHttpService);

return newHttpServiceConstructor;
}

})(angular);

关于java - 如何避免表加载过时的搜索查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59557143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com