【问题标题】:Convert simple synchronous functions to asynchronous functions in Node.JS在 Node.JS 中将简单的同步函数转换为异步函数
【发布时间】:2018-03-21 10:18:26
【问题描述】:

我有两个函数,第一个函数执行简单的加法,第二个函数执行减法。这些函数如何在 Node.JS 中异步执行?

【问题讨论】:

  • 你的最终目标是什么?请阅读How to Ask

标签: node.js asynchronous synchronous


【解决方案1】:

我有两个函数,第一个函数执行简单的加法,第二个函数执行减法。这些函数如何在 Node.JS 中异步执行?

简而言之,你不能。你不能让同步代码在你的 node.js 进程中真正异步运行。您可以影响时间(例如在未来某个时间使用 setTimeout() 启动它),但当它运行时,它仍然是同步的,而不是异步的。

编写异步新代码的唯一方法是:

  1. 使用已经是异步的操作(例如fs.readFile()http.get())。
  2. 在 node.js 插件中使用异步接口编写您自己的本机代码。然后,如有必要,您可以使用实际的系统线程或非阻塞系统接口来实现您的代码。
  3. 将 javascript 代码移动到您作为子进程运行的另一个 node.js 进程中,并返回结果。然后,您的 node.js 进程可以独立于提供异步接口的子 node.js 进程运行。

只有本机代码或由本机代码或其他进程支持的 node.js 函数才能在 node.js 中真正异步。您不能使用纯 Javascript 代码(例如您的加法和减法函数,并在您的单个 node.js 进程中将它们从同步变为异步。没有神奇的方法可以做到这一点。根据定义,node.js 运行您所有的 Javascript在一个线程中。

【讨论】:

  • 正如您提到的 3 种编写异步代码的方法,第一种是我知道如何使用。我想通过简单的示例了解使代码异步的第二种和第三种方法。谢谢
  • @Dnyanesh - 第二种方式(本机代码插件)记录在 here。第三种方式(子进程)记录在child_process module 中。 node.js 中经常使用子进程来从 node.js 主线程中卸载 CPU 密集型的东西(图像处理、繁重的计算等)。通常会创建许多子进程“worker”,然后创建一个工作队列来管理移交给worker的工作。
  • 我浏览了第二种方式的给定文档。如果我使用插件创建函数(如加法、减法),那么我正在调用这些函数,在这种情况下,函数的执行将是异步的还是同步的?跨度>
  • @Dnyanesh - 除非您的插件使用线程或其他进程或某些自然异步的操作系统功能并向 Javascript 公开异步接口,否则它仍然是同步的。您必须编写本机代码才能异步。
猜你喜欢
  • 2012-07-25
  • 1970-01-01
  • 2015-06-25
  • 1970-01-01
  • 2018-01-11
  • 2019-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多