为什么Meteor使用光纤而不是promises或async或其他东西?

为什么Meteor使用光纤而不是promises或async或其他东西?,meteor,Meteor,为什么Meteor使用光纤而不是promises或async或left异步调用? 纤维的好处是什么?有人能解释一下这一建筑决策吗?,Meteor开发负责人杰夫·施密特: Meteor致力于为客户提供最好的体验 应用程序开发人员。我们不得不做出一些看似不受欢迎或有风险的决定才能达到目的,但这已经产生了一套工具 使用起来更简单、更强大、更有趣。它变成 我们发现,这些决定并不像以前那样危险或不受欢迎 有些人可能会察觉到。最好说他们走了 与node.js社区中的传统观点相反。仅 例如,每个请求的线程或每

为什么Meteor使用光纤而不是promises或async或left异步调用? 纤维的好处是什么?有人能解释一下这一建筑决策吗?

,Meteor开发负责人杰夫·施密特:

Meteor致力于为客户提供最好的体验 应用程序开发人员。我们不得不做出一些看似不受欢迎或有风险的决定才能达到目的,但这已经产生了一套工具 使用起来更简单、更强大、更有趣。它变成 我们发现,这些决定并不像以前那样危险或不受欢迎 有些人可能会察觉到。最好说他们走了 与node.js社区中的传统观点相反。仅 例如,每个请求的线程或每个请求的进程模型是 在更大的软件工程社区中非常常见 有时使用节点的继续传递(“异步”)样式 用于聊天服务器和消息总线,但几乎从未用于 业务逻辑。我认为服务器端JavaScript的使用将会 在接下来的几年里以多个数量级增长,我们 将会有大量的新开发者涌入。大多数新代码 这些开发人员编写的将是业务逻辑,他们需要 使用他们在中使用的直线控制流来编写它 几乎所有其他框架

并引述:

Meteor通过其API抽象光纤,允许您编写应用程序 没有回调。最好的部分是,您可以在本周内编写代码 并完全忽略纤维。它只是工作

纤维是流星如此受欢迎的最好原因之一。既然 允许我们编写Node.js应用程序而无需回调,它吸引了 许多开发人员因为这个原因而讨厌Node.js

换句话说,开发者可以创建Meteor应用程序,而无需输入“Fiber”一词。这一切都发生在背景中。因此,大多数应用程序的大多数开发人员实际上没有理由关心“为什么使用光纤”而不是Promise或其他东西,因为开发人员无论如何都不会直接“使用”这些技术。Meteor团队可以在引擎盖下重写Meteor core,以使用Promissions而不是光纤,大多数应用程序应该像以前一样继续运行,而不受变化的影响


至于为什么Meteor core本身的核心团队更喜欢光纤而不是承诺等等,从我所读到的(以及上面Geoff Schmidt的引文中所暗示的)来看,这主要是他们个人的偏好——即他们对回调和代码的厌恶过度意识到其异步性质。他们希望为自己创造与Meteor应用程序开发人员相同的无意识回调体验。

作为开发人员,您不需要了解光纤,这只适用于非常简单的Meteor应用程序。一旦你想做一些异步的事情,比如从S3获取一个文件或将一个文件写入磁盘,你就必须了解光纤。是和否。许多“异步”操作,如HTTP.post(和等待响应)可以以同步方式编码。请参阅并注意有关在运行服务器端时如何选择
asyncCallback
的文本。当然,Meteor提供了一些关于通常是异步的命令的包装,这些命令可能会有很大帮助。但很快这就不够了,即使在您只想使用HTTP.post的情况下也是如此。假设你想做10个POST请求,然后对结果做一些事情。使用HTTP.post方法,您必须发出一个请求,等待它返回,然后执行下一个请求,依此类推。如果您了解Fibers/Futures,那么您可以同时执行所有请求,并等待它们全部返回,然后代码才能继续。我真的推荐任何在Meteor中开发的人来研究光纤。当然,如果你想让你的代码异步运行,你需要用异步方式编写它,使用回调、光纤或其他方式。在我自己的应用程序中,我经常使用
this.unblock()
()和HTTP.post
asyncCallback
;但到目前为止,我从未在代码中直接使用光纤。我认为异步的“流星”方式是使用回调,而不是直接调用光纤;但这在所有情况下都不可能(或不可取)。我的观点是,你可以在Meteor中做很多你需要做的事情,而无需学习纤维。尽管这篇文章很老:我发现了
if(collection.find({uniqueValue}).count()==0{collection.insert({uniqueValue});}
在我们的代码库中,它突然崩溃了,因为已经有一个值具有这个
唯一值
,因为函数被调用了两次。写这篇文章的开发者是1。不知道集合。upsert()和2。不知道
.count()
实际上是异步的。