背景故事,阅读:https://medium.com/code-adventures/4ba9e7f3e52b
TJ说节点失败是因为:
错误你可能得到重复的回调错误你可能根本得不到回调(迷失在边缘中)错误你可能得到带外错误errors
>G218>
有没有人能告诉我TJ提到的问题?例如,我从未见过回调被双重执行的问题。在什么情况下会发生这种情况/它们?
如果你不知道TJ是谁,负责大部分的模块。因此,这不是一个不知情的用户的“空洞”咆哮。他的离开将极大地伤害nodejs,这个问题试图获得关于批评的细节的答案。我从来没有看到过这些问题。你是?
发布于 2014-07-05 17:35:34
1:当你在一个函数中包装一个流时,可能会发生:
function doSomething (callback) {
var stream = createStream();
stream.resume();
stream.on('end', callback);
stream.on('error', callback);
}
那么,如果end
触发了,那么error
也触发了呢?
2:同样的事情,如果什么都没有触发怎么办(例如删除stream.resume
)?这显然是函数中的一个bug,但您看到的是所有东西都挂起了。
4:您天真地挂起一些异步函数以从发射器发出error
事件,然后当错误发生时,侦听器试图销毁发射器,导致另一个error
事件,并以无限循环结束。
5,6,7:没有error
侦听器的发射器可能会使您的应用程序崩溃。您有两个选择:试着理解哪里是安全的,省略一个或显式地在所有地方添加它们。
8:有争议。TJ是协程的支持者,所以这只是他的观点。
发布于 2014-07-05 16:28:54
引用下一段,
...你可能认为一个例程已经完全结束了,直到一个库意外地多次调用回调,或者没有正确地清除处理程序,导致代码重新执行……
因此,似乎只有Node.js才是罪魁祸首,因为您必须记住只调用回调一次,并正确地清理您的处理程序--而一些未指明的第三方开发人员却未能做到这一点。
https://stackoverflow.com/questions/24584427
复制相似问题