【问题标题】:Javascript. Is safe use async and await on front end?Javascript。在前端使用异步和等待安全吗?
【发布时间】:2017-10-23 14:17:25
【问题描述】:

我正在使用 Angular 构建一个 Web 应用程序。 我知道在 ES6 中我可以使用异步/等待,我发现了这篇指南如何使用它们将 Observable 转换为 Promise。 https://labs.encoded.io/2016/12/08/asyncawait-with-angular/ 但它安全吗?浏览器是单线程的,我有点害怕使用它,因为它会阻止所有的 UI。 有人可以提供更多有关它的信息吗? 谢谢

【问题讨论】:

  • asyncawait 只是 Promise 工具的语法便利。它本质上与使用 Promises 完全一样,而且是安全的。应该调查的另一个问题是浏览器对语法的支持。
  • async / await,不会阻塞用户界面..
  • async/await 的确切目的是提供具有同步外观但以非阻塞方式的控制流。正如人们所说,它是 Promise 的语法糖,仅此而已。

标签: javascript angular asynchronous


【解决方案1】:

它不会阻塞线程;至少不超过写callback-based code。这基本上就是重点。它允许编写异步代码,就好像它是同步的一样;让流程更容易推理。

或多或少是syntactic sugar over on top of generators and promises,它们是用于管理异步操作的非阻塞机制。

话虽如此,它们不是魔法;同样的错误可以使基于回调的代码阻塞线程也可以在以async/await编写时阻塞。

【讨论】:

  • 生成器确实与async函数无关。
  • @Pointy 你错了 - 例如,Babel 将 async 函数转换为生成器
  • 您能解释一下它们之间的关系吗?生成器函数同步返回对象。
  • @Pointy 不在评论中 - 网上有很多资料
  • 哦,我明白了 - 这是 Babel 使用的一种技术,我想这是有道理的。谢谢。
【解决方案2】:

Async/await 是实验性的,part of ES7。在服务器端,NodeJS 支持它(最新版本),但在浏览器中,几乎肯定不支持它。改用旧的 Promises/Ajax。

浏览器是单线程的,我有点害怕使用它 认为它会阻止所有用户界面

根据定义,Async/await / Promises / Ajax 不会阻塞 UI,因为它们是异步的。

【讨论】:

  • 如果我没记错的话,问题并不是关于浏览器支持
  • caniuse.com/#search=await - IE11 和 Opera Mini 不支持它,但它在浏览器中可用。
  • Async/await is experimental,我认为现在已经过了那个阶段 -> developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… 现在谁不编译,现在大多数 NPM 模块都是这样构建的。 IOW:我想说使用async / await 非常安全。 in a browser, it will almost certainly not be supported,支持很好,你甚至可以在 chrome 控制台中使用它..
  • 感谢您的所有回答,我正在使用 Babel,因此我可以为所有浏览器使用所有 ES6 功能(为 IE11 添加一些 polyfills ...),当然,promise/ajax 等是异步的,它们不要阻塞 UI,但是使用 await 你确定它不会阻塞整个 UI 等待来自服务器的响应?
  • 不会——我们确定。如果您正在使用 Babel,请继续使用它。这个答案并不完全正确 - 大多数主流浏览器已经支持async/await,无需转译。
猜你喜欢
  • 2021-12-14
  • 2018-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-10
  • 1970-01-01
  • 2019-09-16
相关资源
最近更新 更多