简体   繁体   English

可以在并行运行的 Node.js 中创建异步 function 吗?

[英]It's possible to create an async function in Node.js that runs in parallel?

My goal is to run the longRunnigTask and the quickTask functions in parallel:我的目标是并行运行longRunnigTaskquickTask函数:

function longRunnigTask() {
    return new Promise((resolve) => {
        console.log('longRunnigTask started');
        for (let i = 0; i < 999999999; i++) {};
        console.log('longRunnigTask ended');
        resolve();
    });
}
function quickTask() {
    return new Promise((resolve) => {
        console.log('quickTask started');
        console.log('quickTask ended');
        resolve();
    });
}


(function() {
    Promise.all([
        longRunnigTask(),
        quickTask()
        ]);
})();

My expected output is:我预期的 output 是:

longRunnigTask started
quickTask started
quickTask ended
longRunnigTask ended

But I get:但我得到:

longRunnigTask started
longRunnigTask ended
quickTask started
quickTask ended

It's possible to achieve this without external libraries or I'm doing something wrong?没有外部库就可以实现这一点,或者我做错了什么?

In your main long block loop you can do some super tiny pauses like this在你的主要长块循环中,你可以像这样做一些超级微小的暂停

 const timeout = (ms) => new Promise(resolve => setTimeout(resolve, ms)); function longRunnigTask() { return new Promise(async (resolve) => { console.log('longRunnigTask started'); for (let i = 0; i < 999999999; i++) { if(i === 5555) await timeout(1); }; console.log('longRunnigTask ended'); resolve('res from long'); }); } function quickTask() { return new Promise((resolve) => { console.log('quickTask started'); console.log('quickTask ended'); resolve('res from quick'); }); } (async () => { longRunnigTask().then((res) => console.log(res)); quickTask().then((res) => console.log(res)); })();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM