正确使用异步函数和事件

时间:2021-01-15 13:31:56

标签: javascript node.js asynchronous

我正在构建一个代理检查程序,但在尝试创建“工作池”时遇到了问题 并发工作人员。

例如: 我想要 10 个并发工作人员,这将检查代理数量(假设为 50 个),当我检查 50 个代理时,停止检查并写入文件并退出。

问题是在我达到限制数量后,异步函数仍在运行。

代码:

const EventEmitter = require('events');

const emtr = new EventEmitter();

const EVENTS_TYPES = {
    INCREMENT: "INCREMENT",
    FINISH: "FINISH"
}

const Variables = {
    MAX_WORKERS: 10,
    // example data
    proxies: [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,
                27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,
                43,44,45,46,47,48,49,50,
                1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,
                27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,
                43,44,45,46,47,48,49,50],
    proxyIdx: 0,
    proxyScanned: 0,
    MAX_PROXY_TO_SCAN: 50
}

emtr.on(EVENTS_TYPES.INCREMENT, () => {
    Variables.proxyScanned++;
    console.log("proxyScanned atm: " + Variables.proxyScanned);
    if (Variables.proxyScanned == Variables.MAX_PROXY_TO_SCAN) {
        emtr.emit(EVENTS_TYPES.FINISH)
        return;
    }
    // keep checking
    Variables.proxyIdx++;
    AsyncCheckProxies(Variables.proxies[Variables.proxyIdx])
    
})

emtr.on(EVENTS_TYPES.FINISH, () => {
    // write to file..
    console.log('finish')
    // process.exit(1)
})

async function AsyncCheckProxies(proxy) {
    // do some async functions 
    // mock Async
    setTimeout(() => {
        
        emtr.emit(EVENTS_TYPES.INCREMENT);
    });
    //
}

function main() {
    // Workers pool. 
    for (Variables.proxyIdx; Variables.proxyIdx < Variables.MAX_WORKERS; Variables.proxyIdx++) 
        AsyncCheckProxies(Variables.proxies[Variables.proxyIdx]);

}
main()

似乎异步函数一直在运行。

0 个答案:

没有答案
相关问题