我最近关于async/await
最近一直很瘦,它的情况类似于参考文献。在javascript中,没有指针,derefecence运算符等存在于低级语言中,这使得javascript看起来更简单,因为它假装变量存储对象的值,而实际上它存储对象的引用并且神奇地将其解析为当它注意到您实际想要获取数据时的对象。所以它看起来好像变量存储了对象本身。
使用promises可以观察到相同的情况:当你将一个承诺存储在某个变量中时,你实际上并不关心承诺本身 - 你关心它的价值。
AFAIK在javascript中没有指针,因为它们令人困惑,可能被抽象出来,所以它们就是这样。同样适用于承诺。
而不是做
const data = await fetch("endpoint");
你可能会这样做
const data = fetch("endpoint");
因为javascript会弄清楚你想要的是fetch返回的数据。 Promise和async / await实际上可能成为语言的内部实现细节。
javascript极不可能支持这种模式。目前异步代码的方法是如此之深,以至于在任何地方“明确等待”都会让javascript不再是javascript。我认为有可能提出一种编译成javascript的语言。
如果您正在寻找能够做到这一点的语言,请查看Go。对于异步编程来说,它是一个更加理智的模型,因为它从一开始就被考虑过。在javascript中,promises和async / await在很久之后被添加了。
10次中有9次你会想要'等待'一个异步函数,所以在每个函数中都是'等待'。如果你不想'等待'一个函数,你可以这样调用函数:
go foo()
因此,比较Go和Javascript,go
和await
关键字非常相似,但用于相反的情况。
在go中,函数前面的async
关键字也不需要。