javascript异步是否适合Web应用程序

时间:2017-10-05 15:43:03

标签: javascript async-await

使用新的javascript语法阅读一些async / await示例。

https://gist.github.com/wesbos/1866f918824936ffb73d8fd0b02879b4

有一点不清楚(在链接示例中整个脚本等待返回coffee函数),似乎async / await是一个阻塞动作?如果是这种情况,这并不意味着节点Web应用程序不是一个坏主意吗?

我刚刚使用AWS DynomoDB投入到一个项目中,其所有操作的抽象类都在async / await后面......如果这是阻塞,这肯定会破坏性能?

1 个答案:

答案 0 :(得分:2)

等待 阻止! ..

await确实让您的代码等待。 没有什么魔法可以让等待的代码在你等待的时候运行。在示例中,在咖啡完成之前不会触发那些ajax请求。

..但它可以等待多个异步作业..

但是,您可以等待多个异步进程。您在某个时间点发布的示例会触发三个同时发生的Ajax请求,并且只有在它们全部被触发后才会等待这些请求。这些请求将并行执行。

..您只需在需要答案时等待

重点是你以异步方式开始,最终会结束(承诺!)。您可以在等待(甚至仅在何时)您真正需要等待该呼叫的结果时等待。因此,如果使用await调用每个异步方法,则效果消失,但如果您调用它们,将promise存储在变量中,然后在最后等待它们,那么您将并行运行长动作。这个例子显示了“糟糕”的用法(喝咖啡,直到完成才开始工作),然后是好用(同时做三个请求)。

您可以通过仅等待咖啡和最后的第一个请求来“优化”该示例,就像它等待其他请求一样,因此它并行执行5项操作而不是3项。这只适用于您t需要下一个第一个异步函数的结果。

..等待阻止你,而不是你的来电

我之前说过,等待单个同步功能的呼叫是不好的。情况并非总是如此,因为您只能在异步本身的函数中使用await,因此不会阻止函数的调用者(除非它也调用await)。

例如,您可以创建一个简单的函数来获取一些数据,这些函数使用await AjaxShizzleGoesHere()包装更复杂的Ajax调用。即使你的函数只是调用另一个东西并等待它,它仍然可以并行运行它。您的函数必须等待Ajax调用返回(因此它使用await并被阻止),但函数的调用者不必立即等待结果,它可以启动其他异步函数第一