2014-09-17 3 views
0

의 결과를 반복하는 방법, 내 루프 못생긴 : 맥락에서는 발전기의 결과를 반복하는 더 나은 방법이 있나요 발전기 기능

for(let job = readyJob.next(); !job.done; job = readyJob.next()){ } 

결정할 수 발전기 기능이 있습니다 작업 일괄 처리가 1 .. * 작업으로 구성된 경우 (일괄 처리에서 작업을 반환하지 않을 수도 있음). 생성자를 인스턴스화하고 작업에 대한 작업을 수행하는 일괄 처리 (반복)를 반복하는 연속 루프가 있습니다.

이 반복 문제에 대한보다 세련된 해결책이 있습니까? Java/C#의 전통적인 iterator와 같아서 나쁘지는 않습니다. "각자"와 같은 어떤 것은 읽을 수있는 슈퍼가 될 것입니다 ... 그것은 어쨌든 나의 희망입니다.

let getReadyJob = function *(instance){ 
    let numJobs = 7 ; // getRandomInt(0, 10) ; 
    for(let i = 0; i < numJobs; i++) { 
     yield { 
      jobId: '' + instance + '::' + i, 
      jobReadyOn: (new Date()).valueOf() 
     }; 
    } 
} 

while(true){ 
    let readyJob = getReadyJob() 

    for(let job = readyJob.next(); !job.done; job = readyJob.next()){ 
     console.log(JSON.stringify(job.value)) ; 
    } 
} 

답변

3

예, 사용자 환경은 이미 for...of 지원하는 경우 :

for (var job of readyJob) { 
    // ... 
} 

되지 않은 경우,이 몇 번 보았다 :

var next; 
while (!(next = readyJob.next()).done) { 
    var job = next.value; 
    // ... 
} 
+1

은 " 에 대한 "정확히 내가 뭘 찾고 있었는지 (말 장난이야 - 고마워. 나는 "for loop"옵션을 사용하여 "for loop"옵션을 덩어리로 만들 것입니다. 매우 C++/Java/C#으로 언급했는데, 작동하지만 그 라인에서 계속 진행되는 엄청난 양이 있습니다 ... – akaphenom

+0

글쎄, '동안'은 꽤 관용적이다. 그러나 'for..of'는 가독성이 뛰어나고 발전기와 완벽한 조화를 이룹니다.) – raina77ow