是否可以在javascript中删除async/Wait并使async透明?

是否可以在javascript中删除async/Wait并使async透明?,javascript,promise,async-await,Javascript,Promise,Async Await,我最近对async/await的了解很少,它的情况与参考文献类似。 在javascript中,低级语言中没有指针、去效率运算符等,这使得javascript看起来更简单,因为它假装变量存储对象的值,而实际上它存储对对象的引用,并在注意到您实际想要获取数据时神奇地将其解析为对象。所以看起来好像变量存储了对象本身 承诺也可以观察到同样的情况:当你有一个承诺存储在某个变量中时,你实际上并不关心承诺本身——你关心它的价值 另外,javascript中没有指针,因为它们很混乱,可以抽象出来。承诺也是如此

我最近对
async/await
的了解很少,它的情况与参考文献类似。 在javascript中,低级语言中没有指针、去效率运算符等,这使得javascript看起来更简单,因为它假装变量存储对象的值,而实际上它存储对对象的引用,并在注意到您实际想要获取数据时神奇地将其解析为对象。所以看起来好像变量存储了对象本身

承诺也可以观察到同样的情况:当你有一个承诺存储在某个变量中时,你实际上并不关心承诺本身——你关心它的价值

另外,javascript中没有指针,因为它们很混乱,可以抽象出来。承诺也是如此

而不是做

const data=wait fetch(“端点”)

你可能在做什么

const data=fetch(“端点”)

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

  • 这可能吗(意味着它可以用javascript实现)
  • 有没有一种语言已经做到了这一点
  • 你想让它在javasrcipt中登陆吗

  • javascript极不可能支持这种模式。它目前对异步代码的处理方法非常深入,到处都有“显式等待”将使javascript不再是javascript。我确实认为有可能想出一种可以编译成javascript的语言

    如果您正在寻找一种能够做到这一点的语言,请看围棋。对于异步编程来说,这是一个更明智的模型,因为它从一开始就被考虑了。在javascript中,承诺和async/await是在很久以后才加上的

    10次中有9次您希望“等待”异步函数,因此在go中,每个函数都是“等待”的。如果您不想“等待”函数,请按如下方式调用该函数:

    go foo()
    
    因此,比较Go和Javascript,
    Go
    await
    关键字非常相似,但用于相反的情况


    在go中,函数前面的
    async
    关键字也不需要。

    @JaromandaX如果这让您感到困惑,请查看go。“wait”在任何地方都是隐式的,如果您想“选择退出”等待,可以使用“go”前缀调用函数。这是一个比javascript更明智的模型。@JaromandaX同样适用于引用和指针,但它们在javascript中不存在。如果没有它们,您可以
    ,您需要的是获取返回的数据
    ——这并不总是正确的。例如,您可能需要存储对
    promise
    的引用,以便了解您的请求是否是最后一个请求,并且您希望放弃以前请求的结果。@JaromandaX,我的回答是“为什么您要取消该选择”。我的观点是,还有其他语言在等待并仍然有这种选择。@JaromandaX我是说javascript中没有指针,因为我认为,它们让人困惑,可能会被抽象掉。承诺也是如此。@Bergi你是对的,但我认为这与问题有点无关。我只是想质疑“这是一个更明智的异步编程模型”:-)JS从一开始就运行到完成语义,并且是线程安全的。异步执行某些操作必须是显式的,因为它允许并发性。也许更好的措辞是:“处理异步/等待函数的Go风格可能更适合javascript”。也许,但我真的认为它的并发模型是javascript流行和成功的基石。并发模型(对我来说)感觉像是事后诸葛亮。这是相当主观的ofc。我绝对认为javascript并发模型+“默认等待”绝对是一种可行的语言,它(AFAIK)还不存在。