差异"/>
返回新Promise和Promise.resolve之间的差异
对于下面的代码段,我想了解NodeJS运行时如何处理事情:
const billion = 1000000000;
function longRunningTask(){
let i = 0;
while (i <= billion) i++;
console.log(`Billion loops done.`);
}
function longRunningTaskProm(){
return new Promise((resolve, reject) => {
let i = 0;
while (i <= billion) i++;
resolve(`Billion loops done : with promise.`);
});
}
function longRunningTaskPromResolve(){
return Promise.resolve().then(v => {
let i = 0;
while (i <= billion) i++;
return `Billion loops done : with promise.resolve`;
})
}
console.log(`*** STARTING ***`);
console.log(`1> Long Running Task`);
longRunningTask();
console.log(`2> Long Running Task that returns promise`);
longRunningTaskProm().then(console.log);
console.log(`3> Long Running Task that returns promise.resolve`);
longRunningTaskPromResolve().then(console.log);
console.log(`*** COMPLETED ***`);
第一种方法:
longRunningTask()函数将按预期阻塞主线程。
第二种方法:
在longRunningTaskProm()]中,将相同的代码包装在Promise中,希望执行将从主线程中移开并作为微任务运行。似乎并非如此,想了解幕后发生的事情。
第三种方法:
第三种方法longRunningTaskPromResolve()
起作用。这是我的理解:
Promise的创建和执行仍然与主线程挂钩。仅Promise解决的执行作为微任务移动。
我有点不相信我发现的任何资源和我的理解。
对于下面的代码段,我想了解NodeJS运行时如何处理事情:const billion = 1000000000;函数longRunningTask(){令i = 0;而(i <=十亿)i ++; ...
回答如下:这三个选项均在主线程中运行代码并阻止事件循环。他们开始运行while
循环代码和何时阻止事件循环的时间稍有不同,这将导致它们与某些控制台消息的运行时间有所不同。
更多推荐
返回新Promise和Promise.resolve之间的差异
发布评论