首页 > 解决方案 > Nodejs 在使用 Promise 时阻塞代码。为什么?

问题描述

我正在学习 nodejs,我需要处理一些密集的 cpu 计算。我尝试执行以下代码来了解它:

工作过

const code1 = () => {
  return Promise.resolve().then(
    () => {
      console.log('Waiting...');

      let i = 0;
      while (i < 10000000000) { i++; }
      return 'Exited'
    }
  )
}
const code2 = async () => {
  const resolve = await Promise.resolve();
  console.log('Waiting...');
  let i = 0;
  while (i < 10000000000) { i++; }
  return 'Exited';
}

没用


async function code3() {
  return new Promise((resolve, reject) => {
    console.log('Waiting...');

    let i = 0;
    while (i < 10000000000) { i++; }
    resolve('Exited');

  })
}
async function code4() {
  console.log('Waiting...');

  let i = 0;
  while (i < 10000000000) { i++; }
  return 'Exited'
}

测试

console.log('Script start');

// Execute "async" code. I've changed the code<number> to [1,2,3,4]
code1().then(console.log).catch(console.log);

const t = 3E3 * 3;
console.log('Do some stuff: 3+3 = ' + t)

console.log('End')

问题*:我想知道为什么code3andcode4不能异步工作。它阻塞了主代码,直到运行承诺,然后,返回'End',然后返回'Exited'

标签: javascriptnode.jsasynchronous

解决方案


推荐阅读