2016-09-23 1 views
2

highland.js에 문제가 있습니다. 스트림 데이터에서 함수의 배열을 만들어야하지만 제대로 작동하지 않습니다. 여기 내 코드가 있지만 requests은 항상 비어 있습니다.큰 파일에서 스트리밍 및 배열 만들기

var requests = [];   
_(fs.createReadStream("small.txt", { encoding: 'utf8' })) 
     .splitBy('-----BEGIN-----\n') 
     .splitBy('\n-----END-----\n') 
     .filter(chunk => chunk !== '') 
     .each(function (x) { 

      requests.push(function (next) { 
       Helpers.Authenticate() 
        .then(function (response1) { 
         return Helpers.Retrieve(); 
        }) 
        .then(function (response2) { 
         return Helpers.Retrieve(); 
        }) 
        .then(function() { 
         next(); 
        }); 
      }); 

     }); 
     console.log(requests) 
     async.series(requests); 
+0

방금 ​​질문을 다시 읽었습니다. 'async.series (요청)'이하는 일을 알려주는 마음? 그러나 일반적으로'async.series' 위의 행에서 본 요청을'console.log' 할 것으로 예상된다면 비어있는 원인 스트림을 비동기처럼 차단하지 않을 것입니다. – shriek

+0

이것은 async.js (https://caolan.github.io/async/docs.html#.series) 라이브러리 – user1513388

+0

입니다. 그래서 당신이 직면하고있는 문제와 관련이 없습니다. promises를 만들거나 스트림에 대한 콜백을 전달하여'requests'를 채운 다음'console.log'를 종료하거나'async.series'를 수행해야 할 것입니다. – shriek

답변

1

그냥 highland's 문서를 참조하십시오. 스트림에 .done을 추가하고 requestsconsole.log에 넣어보세요.

_(fs.createReadStream("small.txt", { encoding: 'utf8' })) 
    .splitBy('-----BEGIN-----\n') 
    .splitBy('\n-----END-----\n') 
    .filter(chunk => chunk !== '') 
    .each(function (x) { 

     requests.push(function (next) { 
      Helpers.Authenticate() 
       .then(function (response1) { 
        return Helpers.Retrieve(); 
       }) 
       .then(function (response2) { 
        return Helpers.Retrieve(); 
       }) 
       .then(function() { 
        next(); 
       }); 
     }); 

    }).done(function(){ 
     console.log(requests); 
    }); 
+0

와우 - 감사합니다. 매력처럼 일했습니다. 나는 그것을 해결하려고 내 머리를 찢어 버리고 있었다. – user1513388

0

난 그냥 물건을 묶는 스트림 이벤트를 사용합니다 :

var stream = fs.createReadStream('small.txt', {encoding: "utf8"}); 

stream.on('data', (line) => { 
    var lineStr = line.toString(); //Buffer to String 
    /* You code here */ 
}) 

stream.on('close', (line) => { 
    console.log(request); 
})