如何将 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 中,您可以根据需要启动一个线程并阻止它,而其他线程执行一些工作),或者您更改要求。
我怀疑这最后一个选项是您所谓问题的真正解决方案。现在,您真正需要做什么?
我知道阻塞事件循环是不好的,也知道它的后果。但即使是本机 fs 模块也为某些目的提供了一些同步功能,例如,使用 fs.readFileSync
.
我想将以下异步等待代码转换为阻塞代码。
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 中,您可以根据需要启动一个线程并阻止它,而其他线程执行一些工作),或者您更改要求。
我怀疑这最后一个选项是您所谓问题的真正解决方案。现在,您真正需要做什么?