【发布时间】:2014-05-25 22:40:00
【问题描述】:
我必须搜索可能有数十万行的单词索引表。我可以通过将文档列表传递给搜索来限制我的搜索。在许多文档中搜索单词的请求返回非常缓慢。所以...为了改善用户体验,我们将请求分成几组文档。因此,如果用户要求搜索 90 个文档,并且块大小是每个查询 10 个文档,那么我们发送 90 / 10 = 9 个独立的 $.ajax() 调用。我们希望结果按照发送的顺序出现。
我们实现了这个递归:
var SearchFunction = function () {
$.ajax(/* ... */);
}
var RecursiveSearch = function () {
var deferred = $.Deferred();
if (arrTransSearch.length > 0) {
deferred = SearchDocuments(arrTransSearch.shift());
}
else {
deferred.reject();
}
return deferred.promise().then(RecursiveSearch);
}
if (arrTransSearch.length > 1) {
RecursiveSearch().fail(SomeFunction);
}
var SomeFunction = function () {
alert("Failed. Yes!");
}
当我调试代码时,它似乎deferred.reject() 不会改变deferred.promise() 的状态。也就是当下一行
return deferred.promise().then(RecursiveSearch)
被执行,它只是循环回到递归函数中,而不是退出递归并陷入
RecursiveSearch().fail(SomeFunction);
重要提示:
我正在使用 jQuery-1.7.1。我在JSFiddle 中运行了类似的递归(谢谢Beeetroot-Beetroot),它在 jQuery-1.7.2 上失败,而在 jQuery-2.1.0 上它运行没有问题.
知道如何让递归在 jQuery-1.7.1 中工作吗?
【问题讨论】:
标签: javascript jquery recursion jquery-deferred jquery-1.7