运行2个重复的异步功能,而不会在等待时暂停其他功能

时间:2018-08-02 17:17:53

标签: node.js asynchronous async-await mean

所以我试图运行两个都使用异步的重复功能。这两个功能在某些时候都使用了异步等待功能。问题是当一个功能使用等待时,它将暂停两个功能。我将如何阻止这种情况的发生,以便当一个函数使用await时另一个函数不会暂停。谢谢。下面的示例。

const collectInfo = async () => {
    return new Promise(async function(resolve, reject) {
        // Collect info from the database then
        resolve(data);
    });
}
const functionOne = async () => {
    timeLeft = 5000;

    var timerOne = setInterval(async function(){
        if(timeLeft === 0){
            var getInfTwo = await collectInfo();
            console.log(getInfOne);
            startFunctionOne();
            clearInterval(timerOne);
        }
        timeLeft--;
    },  10);
}
const functioTwo = async () => {
    timeLeft = 10000;

    var timerTwo = setInterval(async function(){
        if(timeLeft === 0){
            var getInfOne = await collectInfo();
            console.log(getInfOne);
            startFunctionTwo();
            clearInterval(timerTwo);
        }
        timeLeft--;
    },  10);
}

const startFunctionOne = async () => {
    functionOne();
}
const startFunctioTwo = async () => {
    functioTwo();
}

startFunctionOne();
startFunctioTwo();

2 个答案:

答案 0 :(得分:0)

请小心,因为您没有为变量timeLeft使用关键字var或让functionOne和functionTwo进入,此变量将变为全局变量,因此您在两个函数中使用相同的全局变量。

如果您的两个功能在同一时间启动并等待输入/输出,则您无需选择何时“暂停”该功能,该功能会通过异步方式自动完成。

答案 1 :(得分:0)

您需要将这些语句分组到一个异步函数中。这样,我们得到了两个异步函数startFunctionOne()startFunctionTwo()

现在,我们利用事件循环来同时运行这些异步非阻塞函数。

const functionOnePromise = startFunctionOne()
const functionTwoPromise = startFunctionTwo()

await functionOnePromise
await functionTwoPromise

我们将语句分为两个功能。在函数内部,每条语句取决于前一条的执行。然后,我们同时执行函数startFunctionOne()startFunctionTwo()