【发布时间】:2019-11-25 16:41:12
【问题描述】:
在节点 13 中,外部 3rd 方库调用我的代码:
const myInput = myCode.run(somVar); // it doesn't use await
由于我的代码必须执行嵌套的同步调用,我如何向 3rd 方库提供一个适当的返回值,它不是一个承诺,而是我的承诺的结果?理想情况下是这样的:
const run = (inputVar) =>{
let result
(async ()=>{
result = await doSyncCalls(inputVar);
})(); // code should not proceed until after await
return result;
} // will return undefined, but ideally should return doSyncCalls result
deasync 将是一个很好的解决方案,但它有一个未解决的错误导致嵌套的 Promise 无法解决。
【问题讨论】:
-
你做不到。根据定义,异步函数在结果确定之前立即返回。
-
那是因为你不能做你想做的事。从异步函数返回值是不可能的。
-
正如您在问题中指出的那样,它并不能完全发挥作用。
-
我重新打开了这个问题,所以它不会被忽略。但如果有人确实有解决方案,则应将其添加到链接问题中,因为这是大多数搜索的最终结果。
-
好吧,如果你愿意在这个异步操作期间阻塞你的整个 node.js 进程(这基本上是你要求做的),那么你可以使用同步 child_process 函数,例如
execFileSync()同步运行另一个应用程序来执行你的异步操作,获取结果并返回它。我之前似乎提出了将异步操作转换为同步操作的唯一方法,但我从未见过它实际上是一个好的设计选择。
标签: javascript node.js promise