有一个异步调用,我正在对一个服务上的数据库进行查询,但是这个服务一次输出的数量有限制,所以我需要通过它发送的结果来检查是否达到了限制,并重复查询直到没有达到限制。
同步模拟:
显然,上述方法不起作用。我在这里看到了一些关于此问题的其他问题,但它们没有提及当您需要每次迭代等待上一个迭代完成并且您不事先知道迭代次数时该怎么办。
我如何将上述内容变为异步?我可以接受使用承诺/延迟逻辑的答案,但最好是整洁的解决方案。
我可能会想出一种可怕的方式来使用等待/超时来解决这个问题,但一定有一种干净,聪明和现代的方法来解决它。
另一种方法是进行“预查询”以事先了解要素的数量,因此您知道循环的数量,但我不确定这是否是正确的方法。
我们有时使用Dojo,但我找到的示例没有解释当您有未知数量的循环时该怎么做。https://www.sitepen.com/blog/2015/06/10/dojo-faq-how-can-i-sequence-asynchronous-operations/
同步模拟:
var query_results = [];
var limit_hit = true; #While this is true means that the query hit the record limit
var start_from = 0; #Pagination parameter
while (limit_hit) {
Server.Query(params={start_from : start_from}, callback=function(result){
limit_hit = result.limit_hit;
start_from = result.results.length;
query_result.push(result.results);
}
}
显然,上述方法不起作用。我在这里看到了一些关于此问题的其他问题,但它们没有提及当您需要每次迭代等待上一个迭代完成并且您不事先知道迭代次数时该怎么办。
我如何将上述内容变为异步?我可以接受使用承诺/延迟逻辑的答案,但最好是整洁的解决方案。
我可能会想出一种可怕的方式来使用等待/超时来解决这个问题,但一定有一种干净,聪明和现代的方法来解决它。
另一种方法是进行“预查询”以事先了解要素的数量,因此您知道循环的数量,但我不确定这是否是正确的方法。
我们有时使用Dojo,但我找到的示例没有解释当您有未知数量的循环时该怎么做。https://www.sitepen.com/blog/2015/06/10/dojo-faq-how-can-i-sequence-asynchronous-operations/