如何调试/解决递归ajax附加重复项?

时间:2016-03-19 19:07:40

标签: javascript jquery ajax recursion

我目前正在开发纯JS / Jquery应用程序并遇到了问题。

方案 我们有一个带有一系列ID的类。并通过对Parse.com数据库的Ajax调用来构建自身。构建之后,它会将一些数据(Id,Name,...)附加到<div>列表,弹出列表的新ID并调用其自身,直到阵列中没有更多ID。结果是一个带有所有构建对象列表的DIV。

这是伪代码中的类

function classSomething(ListOfIds,...){
var aListId= ListOfIds.pop();
$.ajax({
    url: '<secret URL to Parse Database>' + aListId,
    dataType: 'json',
    async : true,
    success: function(response) {

        this.id = response.id;
        this.name = response.name;
        this.address = response.Address;

        ...

        var innerHTML = '<li><div class="aclassObject">'+ this.id + ... + '</div></li>';

        $('#TheList').append(innerHTML)

        if(ListOfIds.length >0){
                new classSomething(ListOfIds,...)
        }

    }
}

问题 问题是列表有时会有重复的元素。不幸的是,当我调试JS时,它在100%的时间内完美运行,但是当正常执行时它将具有“随机”重复。

1 个答案:

答案 0 :(得分:0)

尝试类似这样的事情,删除所有重复项,以便每个递归调用都有一个uniq数组的id。您可以抓住我放置的过滤器表达式,看看是否能解决问题,但我的猜测是所有调用的异步性质都是造成问题的原因。

但是,如果ajax调用返回的时间比另一个更长,该怎么办?因为它都是异步的,你可以发送一个没有ID的,但是返回一个前一个,它将把它交还(不知道你刚删除它)。这是一些伪代码,也许是为了激发想法。

def func(p1, p2, kw1=None, errorstate=None):
    if errorstate:
        do_error_path()
        return

def decorator(func):
   def _decorator(request, *args, **kwargs):
       if condition:
           return func(request, *args, **kwargs)
       else:
          kwargs = kwargs.copy()
          kwargs['errorstate'] = LimitReached()
          return func(request, *args, **kwargs)
return _decorator