2013-08-25 3 views
0

나는 Deferred 오브젝트와 잘 어울리지 않는다고 고백한다. 여러 상점에서 데이터베이스에 대한 쿼리를 만들고 있는데 결과적으로 일련의 작업을 수행하려고합니다. 결과가 비동기 적으로 반환되고 "저장소"에서 해당 작업을 수행 할 방법이 없기 때문에이 문제가 발생합니다. 즉, 문제는이 코드 조각이 항상 같은 "저장"비동기 작업에 루프가있을 때마다집계 함수 결과로 연산하기

for (var i = 0; i < schema['stores'].length; i++) { 
     storeName = schema['stores'][i].name; 

     var objeto = db.executeSql('SELECT MAX(date_upd) FROM ' + '"' + storeName + '"').done(
       function(result, a){ 
        //saveDataSynce(db, storeName, result); 
        console.log(result); 
       } 
     ); 
} 

답변

1

에 동일한 기능을 실행하는 것입니다, 기능의 범위에 대해 매우주의해야합니다. 예제 코드에서 함수 안에 storeName은 항상 마지막으로 실행 된 값이됩니다. 다음과 같이 기능 범위를 사용합니다 (기본 또는 인덱스) 키 항상 오름차순으로 분류되어 있습니다

var getMax = function(storeName) { 
    var indexName = 'date_upd'; 
    var key_range = null; // whole store 
    var limit = 1; 
    var offset = 0; 
    var reverse = true; 
    db.values(storeName, indexName, key_range, limit, offset, reverse).done(
    function(results) { 
     var max_key = results[0]; // may be undefined. OK. 
     //saveDataSynce(db, storeName, max_key); 
     console.log(storeName, max_key); 
    } 
); 
} 

참고 :

var getMax = function(storeName) { 
    db.executeSql('SELECT MAX(date_upd) FROM ' + '"' + storeName + '"').done(
    function(result){ 
     //saveDataSynce(db, storeName, result); 
     console.log(storeName, result); 
    } 
); 
} 

for (var i = 0; i < schema['stores'].length; i++) { 
    getMax(schema['stores'][i].name); 
} 

그러나, YDN-DB에 대한 선호 코딩 패턴은 다음과 NoSQL의 스타일입니다. 최대 키는 역순으로 첫 번째 키입니다.