流星划线风格澄清

Bra*_*ray 19 meteor

Meteor的文档说明:

在Meteor中,您的服务器代码在每个请求的单个线程中运行,而不是以Node的典型异步回调样式运行

他们真的是什么意思?

A)服务器并行运行多个线程(这在Node.js生态系统中似乎不常见)

要么

B)在一个事件服务器中仍然只有一个线程,并且每个请求都是按顺序处理的,至少在它调用服务器外部的资源之前 - 比如数据存储区,此时服务器本身在处理回调时处理回调其他请求,因此您不必自己编写/管理回调.

Dav*_*ser 12

布拉德,你的B是对的.

Meteor在内部使用纤维.正如你所说,在一个事件服务器中只有一个线程,但是当你做(例如)数据库读取时,Fibers的产生和控制很快就会回到事件循环.所以你的代码看起来像:

doc = MyCollection.findOne(id);
Run Code Online (Sandbox Code Playgroud)

(隐藏的"对事件循环的收益,当文档在这里时回来")而不是

MyCollection.findOne(id, function (err, doc) {
  if (err)
     handle(err);
  process(doc);
});
Run Code Online (Sandbox Code Playgroud)

光纤版本中的错误处理也只使用标准JavaScript异常,而不是每次都需要检查参数.

我认为这会导致更容易阅读业务逻辑的代码样式,这种代码想要采取一系列相互依赖的动作.但是,如果您想使用异步样式,Meteor的大多数同步API可选择进行回调并变为异步.

  • Meteor文档中关于此的措辞确实可以使用澄清.这听起来像是他们采取的一种非常好的方法,但是措辞使我怀疑它是真正在幕后发生的事情. (3认同)