如何解决有可能在Node.js中创建一个并行运行的异步函数吗?
我的目标是并行运行longRunnigTask
和quickTask
函数:
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()
]);
})();
我的预期输出是:
longRunnigTask started
quickTask started
quickTask ended
longRunnigTask ended
但是我得到了
longRunnigTask started
longRunnigTask ended
quickTask started
quickTask ended
有可能在没有外部库的情况下实现此目标,或者我做错了什么?
解决方法
在主要的长块循环中,您可以执行一些这样的超小暂停
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));
})();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。