我最近想到了一个问题,我不得不从现有的JavaScript代码中调用异步函数,最终不得不在整个堆栈中添加async / await,直到那时,因为我找不到调用方法异步地同步一个异步函数(就像您在这种情况下基本上使用其他所有语言所做的那样)。后来我了解到,通常无法在JavaScript上下文中以任何方式解决Promises,只有在脚本完成后,Promise才会在某个时候由引擎解决。
console.log('begin')
const theUsual = async () => 'Hello World'
Promise.resolve(theUsual()).then(console.log)
console.log('end')
输出为:
begin
end
Hello World
输出的顺序清楚地证明,只有在脚本完成后才能解决Promise。我的问题是:
为什么不能从JavaScript上下文中解析承诺的正式原因是什么?
Imo,添加Promise.resolveNow
之类的内容来同步解决Promise会非常容易,类似于您的操作方式。通过调用get来解决Java的Future问题,但显然这样的事情并未使它成为语言。