2014-02-12 3 views
2

SQLite 데이터베이스를 쿼리하고 나중에 사용되는 배열로 결과를 푸는 다음 함수가 있습니다. 나는 각 진술이 (self.projectSetEditList)에있는 테이블을 처리 할 때까지 기다릴 필요가있다. 그러나 지연된 마스터가 모든 약속을 기다리고있는 것 같지 않다. 다음 함수로 진행하기 전에 모든 SQL 결과가 언제 준비되는지 알아야합니다.JQuery 여러 지연이 해결되기를 기다리는 중

/// <summary>Validates user INSERTS to project_set entities</summary> 
this.initProjectSetAdds = function() 
{ 
    var promises = []; 
    var masterDeferred = new $.Deferred(); 

    ///var count = (self.projectSetEditList.length - 1); 
    $.each(self.projectSetEditList, function (index, syncEntity) 
    { 
     var def = new $.Deferred(); 
     //get the config entity definition object 
     var entityDefinition = self.getEntityDefinition(syncEntity.entity_name); 
     self.db.executeSql(self.getAddsSql(entityDefinition)).done(function (tx, insertResults) 
     { 
      self.projectSetAdds.push({ definition: entityDefinition, addedObjects: dataUtils.convertToObjectArray(insertResults) }); 
      def.resolve(true); 
     }); 
     promises.push(def); 
    }); 

    //resolve all deferred and return to caller 
    $.when.apply($, promises).then(function() 
    { 
     masterDeferred.resolve(arguments); 
    }, 
    function() 
    { 
     masterDeferred.reject(arguments); 
    }); 

    return (masterDeferred.promise()); 
} 

유일한 비동기 기능은 내부의 모든 제안을 크게

+0

또한 참조하십시오. https://api.jquery.com/ajaxStop/ – Blazemonger

+0

@Blazemonger, executeSql은 아약스 호출이 아니며, SQLite 플러그인 비동기 호출입니다 ... – gdex

답변

2

귀하의 코드는 나에게 불필요하게 복잡하게 나타납니다 감사합니다 ... executeSql입니다. 또한 약속을 만들어 $.when 때문에

masterDeferred 직접 만드는 귀찮게하지 않습니다, 단지 수행

return $.when.apply($, promises); 

유일한 기능적인 차이는이 버전이 최종 콜백 개별 매개 변수로 true 결과를 전달할 것입니다 반면 코드는 [true, true, ...] 값의 단일 배열을 전달합니다.

+0

설명 할 필요가없는 추가 코드는 죄송합니다. 문제. 지금까지 솔루션이 작동하고있는 것 같습니다 ... 감사합니다! – gdex

관련 문제