【问题标题】:asynchronous in Node and Javascript [closed]Node和Javascript中的异步[关闭]
【发布时间】:2017-12-22 10:30:54
【问题描述】:

我是 NodeJS 的新手,有一些我不明白的地方。

Node 的基本特性是异步的,但 JS 本身是异步的(通过 setTimeout)。那么为什么像 Promise 这样的功能在 Node 之前不存在呢?

@EDIT:通过Christoph的回复,我了解到今天的JS和Node是相似的,所以都是异步非阻塞I/O?

谢谢大家。

【问题讨论】:

  • setTimeout 如何工作 in the browserin node
  • 试试看这个简短的视频:youtube.com/watch?v=8aGhZQkoFbQ 它可能会稍微解释一下它对 nodejs 的意义。
  • 请编辑问题以将其限制为具有足够详细信息的特定问题,以确定适当的答案。避免一次问多个不同的问题。

标签: javascript node.js asynchronous


【解决方案1】:

Promise API 最近才被添加到 javascript 核心中,这与 node.js 无关。这只是语言开发本身的一部分。

Javascript 最初是一种用于操作浏览器 DOM 的简单脚本语言。它是在 95 年由 Brendan Eich 在 2 周内开发的。这意味着,您今天拥有的大多数功能都没有。例如。 XMLHTTPRequest,每个现代网站的核心直到 2000 年才被引入。当时很多人仍然认为 javascript 是一个很好的噱头来创建一些华丽的文本效果,但不是一个严肃的工具来进行(网络)开发。

在浏览器大战尘埃落定并且 javascript 战胜 flash 和 java 之后,供应商同意他们应该真正一起工作,并且需要所有浏览器都遵守严格的 web 标准和所有 web 技术的标准化 ( HTML、CSS、EcmaScript)获得了巨大的推动。有了这些,javascript 获得了很多新功能。

随着 javascript 的成功,人们开始思考“为什么只将 javascript 用于客户端脚本?” - 所以在 2009 年 Ryan Dahl 创建了 Node.js,一个用于在服务器端执行 JavaScript 代码的 JavaScript 运行时环境。

这意味着,“浏览器 javascript”和“nodejs”的核心实际上都基于 ECMAScript,并且运行在单线程异步执行的相同原则上。两者都可以选择生成worker threadssetTimeout 等基本功能在浏览器和节点中几乎相同。

但是,浏览器有自定义对象来处理网页的呈现和与用户的交互,并且是非常严格的沙盒,而 node 具有服务器端语言所需的所有 API(例如,广泛的文件访问),这基本上可以如果它们存在于浏览器中,则会带来安全风险。

【讨论】:

  • 我明白,但是在 Node 之前是否存在来自 JS 的异步行为?是否受到启发?为什么像 Bluebird 这样的库是用 NodeJs 编写的?感谢您的回复。
  • @Quoc-HaoTran NodeJS IS javascript,所以它的所有范例都与浏览器的 javascript 相同。 Bluebird 不是用 NodeJS 编写的,它是一个用 javascript 编写的用于 nodejs 的库。我编辑了我的答案,希望现在更清楚?
  • 非常感谢,现在更清楚了。我可以再问你一个问题吗?我们如何在 JS 中编写异步函数?
  • 为此使用 async 关键字。然后该函数返回一个 Promise 对象。小心,因为 IE 不支持这个!
  • async 是 es7 的新功能,所以在它之前还有其他方法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-08
  • 1970-01-01
  • 2020-12-02
  • 2012-12-15
  • 1970-01-01
相关资源
最近更新 更多