是否有可能在JavaScript中删除异步/等待并让异步透明化?

时间:2018-09-04 09:54:33

标签: javascript promise async-await

我最近对async/await一直很陌生,它的情况类似于参考文献。 在javascript中,不存在低级语言中的指针,解引用运算符等,这使javascript看起来更简单,因为它假装变量存储对象的值,而实际上它存储对对象的引用并神奇地将其解析为当该对象通知您实际上要获取数据时。因此,看起来好像变量存储了对象本身。

使用promise可以观察到完全相同的情况:当您将promise存储在某个变量中时,您实际上并不在乎promise本身,而在乎其价值。

AFAIK在javascript中没有指针,因为它们令人困惑并且可以被抽象化。承诺也一样。

代替

const data = await fetch("endpoint");

你可能会做

const data = fetch("endpoint");

因为javascript将弄清楚您想要的是提取所返回的数据。承诺和异步/等待实际上可能成为语言的内部实现细节。

  1. 是否有可能(意味着可以用javascript实现)?
  2. 是否已经有一种语言可以做到这一点?
  3. 您想让它进入javasrcipt吗?

1 个答案:

答案 0 :(得分:1)

javascript极不可能支持这种模式。当前异步代码的方法是如此之深,以至于到处都有“显式等待”将使javascript不再是javascript。我确实认为有可能提出一种可以编译为javascript的语言。

如果您正在寻找可以做到这一点的语言,请查看Go。对于异步编程而言,这是一个更为精明的模型,因为它从一开始就被考虑。在javascript中,promise和async / await在以后很久才解决。

十分之九的您将要“等待”一个异步函数,因此在运行时,每个函数都被“等待”。如果您不想“等待”一个函数,可以这样调用该函数:

go foo()

因此,将Go和Javascript进行比较,goawait关键字非常相似,但是用于相反的情况。

在旅途中,也不需要在函数前面使用async关键字。