2016-09-23 98 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

我明白了。所以這與你面臨的問題無關。您可能需要創建一個承諾或傳遞一個回調,以完成填充'requests'然後'console.log'或對其執行'async.series'。 – shriek

回答

1

只要閱讀highland's文檔。嘗試將.done添加到您的流中,console.log輸出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(); 
       }); 
     }); 

    }).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); 
})