编写异步 javascript 时,您的代码将包含一堆 await 和 async、Promises 和回调。这是我们获取页面并计算 div 元素数量的示例:随着您编写越来越多的异步代码,您最终会编写大量的 await。在像 Python 和 Go 这样的语言中,你编写异步代码就好像它是同步的一样。如果我们可以在 Javascript 中做同样的事情呢?我厌倦了调用一个函数只是为了发现它返回一个 Promise 而不是一个真正的值。 n/async Javascript 使用您编写的代码,并将 await 放在每个表达式的前面。这听起来很疯狂,确实如此,但这里有一个演示:单击代码下方的 > Show transpiled code 按钮以查看转换后的版本。正如您所看到的,插入了很多(不必要的)等待,但至少我们不必再自己编写它们,这肯定会将我们的生产力提高 10 倍。这种风格的 Javascript 允许我们编写异步代码,就好像它是同步的一样,但实际上它当然仍然是异步的。使用这种风格的 Javascript,您不能再同时执行两个异步任务,一切都将同步执行。例如,如果您想使用 fetch 发出请求,但只愿意等待两秒钟的结果,那么您就不走运了。其次,现在的编译器真的很聪明,但是在任何地方(包括它什么都不做的地方)散布在 await 中的用户代码可能不是编译器设计者优化的优先事项。
使用它是为了好玩,在笔记本中的实验代码中使用它(如上面的示例),但请不要将其投入生产。不等待成员访问表达式(因为这会导致调用成员函数时出现问题)。例如: // n/async javascript input const x = myObject. abc(); // 转译输出 ( async () => { const x = await ( await myObject).ab c();})(); // 你可能会期待 ( async () => { const x = await ( await ( await ( await ( await myObject). a ). b ). c )();})();在实践中,这可能是你想要的。如果您确实需要等待成员变量,您可以自己编写等待。