返回新Promise和Promise.resolve之间的差异

编程入门 行业动态 更新时间:2024-10-08 00:35:04

返回新Promise和Promise.resolve之间的<a href=https://www.elefans.com/category/jswz/34/1768417.html style=差异"/>

返回新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之间的差异

本文发布于:2024-05-07 07:36:42,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1755186.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:差异   Promise   resolve

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!