如何将 async/await 代码转换为 javascript 中的阻塞代码?

How to convert async/await code to blocking code in javascript?

我知道阻塞事件循环是不好的,也知道它的后果。但即使是本机 fs 模块也为某些目的提供了一些同步功能,例如,使用 fs.readFileSync.

的 CLI

我想将以下异步等待代码转换为阻塞代码。

let value = undefined;

function setup() {
  return new Promise((resolve) => {
    setTimeout(() => {
      value = "**value**";
      resolve();
    });
  });
}

// need to convert below function to blocking
async function getValue() {
  await setup();
  return value;
}

console.log(await getValue()); // top level await OK

假设它是阻塞的,我们可以这样调用它

getValue(); // without await or .then

我这样试过。但它不起作用。

function getValue() {
  setup();
  while (!value) {
    // wait until we get value
  }

  return value;
}

console.log(getValue())

我怎样才能做到这一点?

fs.readFileSync 阻塞。有什么方法可以使用 readFileSync 使用的技术)

编辑

相关主题:Convert asynchronous/callback method to blocking/synchronous method

How can I achieve this?

您更改语言。

认真地说:Java脚本是(或多或少,那里有很多警告)单线程。您的回调代码应由您打算阻止的同一线程处理。

你没有办法做到这一点:这是不可能的。

因此,要么更改您的语言(在 C# 或 Java 中,您可以根据需要启动一个线程并阻止它,而其他线程执行一些工作),或者您更改要求。

我怀疑这最后一个选项是您所谓问题的真正解决方案。现在,您真正需要做什么?