我最近对async/await
一直很陌生,它的情况类似于参考文献。
在javascript中,不存在低级语言中的指针,解引用运算符等,这使javascript看起来更简单,因为它假装变量存储对象的值,而实际上它存储对对象的引用并神奇地将其解析为当该对象通知您实际上要获取数据时。因此,看起来好像变量存储了对象本身。
使用promise可以观察到完全相同的情况:当您将promise存储在某个变量中时,您实际上并不在乎promise本身,而在乎其价值。
AFAIK在javascript中没有指针,因为它们令人困惑并且可以被抽象化。承诺也一样。
代替
const data = await fetch("endpoint");
你可能会做
const data = fetch("endpoint");
因为javascript将弄清楚您想要的是提取所返回的数据。承诺和异步/等待实际上可能成为语言的内部实现细节。
答案 0 :(得分:1)
javascript极不可能支持这种模式。当前异步代码的方法是如此之深,以至于到处都有“显式等待”将使javascript不再是javascript。我确实认为有可能提出一种可以编译为javascript的语言。
如果您正在寻找可以做到这一点的语言,请查看Go。对于异步编程而言,这是一个更为精明的模型,因为它从一开始就被考虑。在javascript中,promise和async / await在以后很久才解决。
十分之九的您将要“等待”一个异步函数,因此在运行时,每个函数都被“等待”。如果您不想“等待”一个函数,可以这样调用该函数:
go foo()
因此,将Go和Javascript进行比较,go
和await
关键字非常相似,但是用于相反的情况。
在旅途中,也不需要在函数前面使用async
关键字。