最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

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

网站源码admin18浏览0评论

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

返回新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循环代码和何时阻止事件循环的时间稍有不同,这将导致它们与某些控制台消息的运行时间有所不同。

发布评论

评论列表(0)

  1. 暂无评论