我正在编写基于NodeJS的服务器端应用程序。 应用程序在某些TCP和UDP端口上侦听传入消息,当消息到达时,它们将被解析,相关数据将存储到MySQL数据库中。整个工作正常,NodeJS处理并行并发请求的能力令人惊叹。 然而,阅读有关NodeJS危险的反馈,我发现了一些让我感到困惑的问题:问题是关于回调。 想象一下下面的代码:
function ParseMessage(payload,callback_ko,callback_ok) {
// here we evaluate the parsed_message content, err is set if parsing errors occurs
....
if(!err) {
// if there are no errors invoke the callback_ok to let the flow continue passing the parsed content
if(typeof callback_ok == 'function') {
callback_ok(parsed_message);
}
else {
// if error occurs invoke the callback_ko passing the payload to let the flow continue in another path, maybe attempt another parsing
if(typeof callback_ko =='function') {
callback_ko(payload);
}
}
return; // <---- Ensure the functions ends
}
放置代码if(typeof callback == 'function')
是为了避免调用传递给 ParseMessage 函数的参数不是函数(在这种情况下是 ParseMessage < / em>只需退出返回任何结果)。
我怀疑是return;
声明:
我知道返回语句必须始终存在(如果我错了,请纠正我),以便允许异步功能正常结束。由于我们在这里没有返回任何内容(我们在此处调用回调),我们根本就没有返回任何内容,但我不知道返回语句的位置是否为正确对象,真爱。换句话说,我应该将return语句放在函数的末尾,还是应该有这样的东西,而不是:
function ParseMessage(payload,callback_ko,callback_ok) {
// here we evaluate the parsed_message content, err is set if parsing errors occurs
....
if(!err) {
// if there are no errors invoke the callback_ok to let the flow continue passing the parsed content
if(typeof callback_ok == 'function') {
callback_ok(parsed_message);
}
return; // <---- Ensure the functions ends
else {
// if error occurs invoke the callback_ko passing the payload to let the flow continue in another path, maybe attempt another parsing
if(typeof callback_ko =='function') {
callback_ko(payload);
}
return; // <---- Ensure the functions ends
}
}
我发现有人还建议写return callback(payload);
之类的东西。什么是最正确的策略?