2017-04-19 4 views
0

클래스 1의 값과 관련된 클래스 2의 값을 더 찾으려면 클래스 1에서 제공된 값을 사용하려고합니다. 그러나 k의 값을 반복하여이 작업을 수행하려고 했었지만 루프를 어디에 두어도 상관 없으므로 k의 최종 값만 사용합니다. 약속을 다룰 때 색인에 대한 필요성을 어떻게 다룰 지 말해 줄 수 있습니까? 나는 두 가지 새로운 약속과 분석입니다. 편집 : IF 브래킷을 잘못 배치했습니다.색인이 붙은 자바 스크립트 구문 분석 약속 루프

var Class1 = Parse.Object.extend("Class1"); 
var Class2 = Parse.Object.extend("Class2"); 

Parse.Promise.as().then(function() { 

    var query = new Parse.Query(Class1); 
    return query.find() 

    }).then(function (class1IDs) { 
    for (var k = 0; k < class1IDs.length; k++) { 

     var class1IDEntry = class1IDs[k]; 
     var class1ID = class1IDEntry.id; 

     Parse.Promise.as().then(function() { 
     var class1 = new Class1(); 
     class1.id = class1ID; 

     var query = new Parse.Query(Class2); // 
     query.equalTo("class1", class1); 
     return query.find() 

     }).then(function (class2IDs) { 
     var stuff; 
     }); 
    } 

    }).then(function() { 
    done(); 
    }, function(error) { 
    console.log(error); 
    done(new Error(error)); 
    }); 
}); 
+0

나는 약속이 비동기 적이기 때문에 이것이라고 생각하십니까? 그렇다면 한쪽 끝을 멈추고 다른 쪽 끝은 한 걸음 앞으로 움직이는 방법이 있습니까? – RWDJ

답변

0

당신은 done() 호출 직전, 완료 루프의 내부에 생성 된 모든 약속 기다려야 할 - 루프 실행 내부해야 쿼리 직렬 또는 병렬로? (당신이 생각대로) 코드의 비동기 특성으로, 모든 class1.id = class1IDclass1IDs에 시리즈 class1IDs을 통해

실행 class1IDs 통해

var Class1 = Parse.Object.extend("Class1"); 
var Class2 = Parse.Object.extend("Class2"); 

Parse.Promise.as().then(function() { 
    var query = new Parse.Query(Class1); 
    return query.find() 
}).then(function(class1IDs) { 
    return class1IDs.reduce(function(promise, class1IDEntry) { 
     var class1ID = class1IDEntry.id; 
     var class1 = new Class1(); 
     class1.id = class1ID; 
     var query = new Parse.Query(Class2); // 
     query.equalTo("class1", class1); 
     return promise.then(function() { 
      return query.find(); 
     }).then(function(class2IDs) { 
      var stuff; 
     }); 
    }, Parse.Promise.as()); 
}).then(function() { 
    done(); 
}, function(error) { 
    console.log(error); 
    done(new Error(error)); 
}); 

실행에를 마지막 항목의 class1ID있을 것이다 때문에 당신이 다른 문제입니다 병렬

var Class1 = Parse.Object.extend("Class1"); 
var Class2 = Parse.Object.extend("Class2"); 

Parse.Promise.as().then(function() { 
    var query = new Parse.Query(Class1); 
    return query.find() 
}).then(function(class1IDs) { 
    return Parse.Promise.when.apply(null, class1IDs.map(function(class1IDEntry) { 
     var class1ID = class1IDEntry.id; 
     var class1 = new Class1(); 
     class1.id = class1ID; 
     var query = new Parse.Query(Class2); // 
     query.equalTo("class1", class1); 
     return query.find() 
     .then(function(class2IDs) { 
      var stuff; 
     }); 
    })); 
}).then(function() { 
    done(); 
}, function(error) { 
    console.log(error); 
    done(new Error(error)); 
}); 
+0

감사합니다. 첫 번째 것은 내가하고있는 일을 위해 일했습니다. – RWDJ