TJ Holowaychuk对NodeJs的批评
后面的故事,阅读: https : //medium.com/code-adventures/4ba9e7f3e52b
TJ说节点失败,因为:
- 你可能会得到重复的callback
- 你可能根本不会得到任何回报(迷失方向)
- 您可能会遇到带外错误
- 发射器可能会得到多个“错误”事件
- 错过“错误”事件发送一切到地狱
- 往往不确定什么需要“错误”处理程序
- “错误”处理程序非常冗长
- 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,并且正确地清理你的处理程序 – 而一些未指定的第三方开发人员却不这样做。