javascript 在NodeJS中,有没有一种方法可以强制promise同步解析?

anauzrmj  于 2023-04-28  发布在  Java
关注(0)|答案(1)|浏览(115)

“我知道,我知道,你不应该这样做。在这种情况下,重构超出了范围,在我所拥有的时间范围内是不实际或不可能的。*
我正在对一些依赖于同步块的现有遗留代码进行更改。
新代码依赖于Promise的解析,但手动跟踪所有调用并将其转换为异步对我来说并不实用。
代码不是性能关键的,并且在应用程序启动时运行一次,是否有某种方法可以让我等待promise同步解析?
像这样愚蠢的事情:

const si = require('systeminformation')

async function getPhysicalCores() {
  const cpu = await si.cpu()
  return cpu.physicalCores
}

function main() {
  let result = undefined
  foo().then((cores) => { result = cores })
  while (result === undefined) continue
  return result
}

main()

一种可能的方法是使用execSync

function getPhysicalCores() {
  const result = child_process
    .execSync(`node -e "console.log((await require('systeminformation').cpus()).physicalCores)`;
  return parseInt(result, 10)
}
piah890a

piah890a1#

有没有办法让我等待promise同步解决?
不。(while (!done) continue; busy-loop不会让其他任务运行,所以promise执行器代码永远不会被执行。)
应用程序启动时运行一次
然后,假设function main()是实际的应用程序入口点,并且不关心它的返回值i。e.

function main() {
  console.log("I'm an application!");
}
main();

你能做的

async function init() {
  await newAsynchronousInit();
  main();
}

init();

(or等效的.then()版本),因此异步init函数可以执行它的任务,然后继续执行main函数。

相关问题