2017-08-04 75 views
1

我正在尝试逐行读取文件,并使用读取的数据执行一些异步函数。我需要限制这种并发性。我知道如何逐行阅读,以及如何使用模块进行并发,但我不知道如何将它们放在一起。我正在使用逐行和喉咙模块。如何在node.js中逐行执行并发限制

下面是到目前为止我的尝试没有成功:

// modules 
const CONCURRENCY = 5 
const throat = require('throat')(CONCURRENCY) 
const LineByLineReader = require('line-by-line') 
lr = new LineByLineReader('urls.txt') 

throat(() => { 
    lr.on('line', function (line) { 

     return main(line) // this is an async function that returns a promise 
     Promise.resolve() 

    }) 
}) 

回答

0

您需要使用throatline回调的内部

const CONCURRENCY = 5 
const throat = require('throat') 
const LineByLineReader = require('line-by-line') 
lr = new LineByLineReader('urls.txt') 

lr.on('line', throat(CONCURRENCY, main)) 

此外,您还可以使用节点的内置readline模块,而不是line-by-line

const fs = require('fs') 
const readline = require('readline') 

readline. 
    createInterface({input: fs.createReadStream('urls.txt')}). 
    on('line', throat(CONCURRENCY, main))