2014-02-20 5 views
0

내 REST API에있는 세 개의 열 "ser_noofsubconstituents,ContactId,ParentCustomerId"재귀 함수

if ser_noofsubconstituents > 0의 그들은, 우리가 반복적으로이 함수를 호출하는 자식의 접촉을 필요로 한 평균, 수를 제안 해주십시오 업에 10

입니다 ser_noofsubconstituents jquery의 좋은 솔루션. 호출이 비동기이기 때문에 이러한 맥락에서

 function getContituent(id, parentcustomerid) { 
     var query = ""; 
     if (parentcustomerid) 
      query = _ODataPath() + "ContactSet?$select=ser_noofsubconstituents,FullName,ContactId,ParentCustomerId&$filter=ParentCustomerId/Id eq guid'" + id + "'"; 
     else 
      query = _ODataPath() + "ContactSet" + "(guid'" + id + "')?$select=ser_noofsubconstituents,FullName,ContactId,ParentCustomerId"; 

     return $.ajax({ 
      type: "GET", 
      contentType: "application/json; charset=utf-8", 
      datatype: "json", 
      url: query, 
      beforeSend: function (xhr) { 
       xhr.setRequestHeader("Accept", "application/json"); 
      }, 
      success: function (data, textStatus, xhr) { 
       if (!parentcustomerid) { 
        var cont = {}; 
        window._noofsubconstituents = data.d.ser_noofsubconstituents; 
        cont.ser_noofsubconstituents = data.d.ser_noofsubconstituents; 
        cont.contactId = data.d.ContactId; 
        cont.FullName = data.d.FullName; 
        cont.ParentCustomerId = data.d.ParentCustomerId; 
        items.push(cont); 
        window.fetchCompleted = true; 
        $("#contactListView").append("<li style='padding-left:4px;' onclick='contituent_click(this)' data-id='" + cont.contactId + "'><h2>" + cont.FullName + "<h2><div></div></li>"); 
       } else { 
        for (var i = 0, len = data.d.results.length; i < len; ++i) { 
         var cont = {}; 
         window._noofsubconstituents = data.d.results[i].ser_noofsubconstituents; 
         cont.ser_noofsubconstituents = data.d.results[i].ser_noofsubconstituents; 
         cont.contactId = data.d.results[i].ContactId; 
         cont.FullName = data.d.results[i].FullName; 
         cont.ParentCustomerId = data.d.results[i].ParentCustomerId; 
         items.push(cont); 

         var pl = $("#contactListView").find("li[data-id=" + cont.ParentCustomerId.Id + "]").attr("style"); 

         if (pl != undefined) { 
          pl = parseInt($.trim(pl.split(":")[1].replace("px", ""))) + 4; 
         } else { 
          pl = 4; 
         } 

         $("#contactListView").append("<li style='padding-left:" + pl + "px;' onclick='contituent_click(this)' data-id='" + cont.contactId + "'><h2>" + cont.FullName + "<h2><div></div></li>"); 
        } 

        if (data.d.results.length > 0) { 
         window.fetchCompleted = false; 
         getContituent(data.d.results[0].ContactId, true); 
        } 
       } 
       if (window._noofsubconstituents > 0) { 
        window.fetchCompleted = false; 
        getContituent(data.d.ContactId, true); 
       } 
      }, 
      error: function (xhr, textStatus, errorThrown) { } 
     }); 
    } 

답변

0

이렇게 재귀는 조금 다르다. 당신이하고 싶은 것은 콜백을 제공하고 함수 자체에서 돌아 오기보다는 콜백을 반환하는 것입니다. 예를 들어

:

function getStuff(inputArray, done, results, index) { 
    if (!results) results = []; 
    if (index === inputArray.length) return done(results); 
    $.ajax({ 
     url: 'example.com/json', 
     success: function(data) { 
      results.push(data); 
      getStuff(inputArray, done, results, ++index); 
     } 
    }); 
}