首页 > 解决方案 > 等待两个带有事件和循环的承诺

问题描述

我有一段这样的代码:

for(let j = 0; j < someNumber; j++) {
    const forkedChildOne = fork("./child.js");
    const childOne = await new Promise((resolve, reject) => {
        forkedChildOne.on('message', (msg){
            // someCode
            resolve(msg);
        });
    });
}

for(let i = 0; i < someAnotherNumber; i++) {
    const forkedChildTwo = fork("./child_numberTwo.js");
    const childTwo = await new Promise((resolve, reject) => {
        forkedChildTwo.on('message', (msg){
            // someCode
            resolve(msg);
        });
    });
}

但在这里,它首先等待第一个循环完成,然后进入第二个循环。但我需要并行运行它们。我怎样才能做到这一点?谢谢。

标签: javascriptnode.jsloopseventschild-process

解决方案


async将它们放在使用关键字定义的单独函数中。然后调用这两个函数,一个接一个。

const forkloop = async (number, js) {
    for(let j = 0; j < number; j++) {
        const forked = fork(js);
        const child = await new Promise((resolve, reject) => {
            forked.on('message', (msg){
                // someCode
                resolve(msg);
            });
        });
    }
}

const init = async () => {
    /* Do not await here */ forkloop(someNumber, './child.js');
    /* Do not await here */ forkloop(someAnotherNumber, './child_numberTwo.js');

}

init();

推荐阅读