TJ Holowaychuk对NodeJs的批评

后面的故事,阅读: https : //medium.com/code-adventures/4ba9e7f3e52b

TJ说节点失败,因为:

  1. 你可能会得到重复的callback
  2. 你可能根本不会得到任何回报(迷失方向)
  3. 您可能会遇到带外错误
  4. 发射器可能会得到多个“错误”事件
  5. 错过“错误”事件发送一切到地狱
  6. 往往不确定什么需要“错误”处理程序
  7. “错误”处理程序非常冗长
  8. callback吸

有人可以告诉TJ提到的问题吗? 例如,我从来没有看到callback被双重执行的问题。 它会在什么情况下发生?

编辑对于那些投票结束:如果你不知道谁是TJ,他是负责大多数NPM模块。 所以这不是一个不知情的用户“闲置”的。 他的离开会大大伤害nodejs,这个问题试图得到答案的具体批评。 我从来没有看到这些问题。 你做?

1:可能发生,当你在一个函数中包装一个stream:

function doSomething (callback) { var stream = createStream(); stream.resume(); stream.on('end', callback); stream.on('error', callback); } 

那么,如果end火灾,那么error火灾呢?

2:同样的事情,如果什么都不发生(例如remove stream.resume )? 这显然是一个函数中的错误,但是你看到的是,一切都只是挂起。

4:你天真地挂钩了一些asynchronous函数从发射器发出error事件,那么当错误发生时,一个监听器试图破坏发射器,导致另一个error事件,并以无限循环结束。

5,6,7:每个发射器没有error侦听器可能会崩溃你的应用程序。 你有两个select:试着去了解哪里是安全的,可以省略一个,或者在任何地方明确添加。

8:有争议的。 TJ是协程的支持者,所以这只是他的意见。

从下一段引用,

你可以认为一个例程已经完成,直到一个库意外地多次调用callback,或者没有正确地清除处理程序,并导致代码重新执行[…]

所以Node.js似乎只是因为你必须记得只调用一次callback,并且正确地清理你的处理程序 – 而一些未指定的第三方开发人员却不这样做。