除了调用函数之外,我还有一个包含查询函数和组合回调的函数:
function MyCallingFunction()
{
var response = MyFunction();
//...do some stuff with response
}
哪个会导致:
function MyFunction()
{
//does some stuff
ReturnRows(query, connection, function(result)
{
//... Omitted error handling
if(result == null) //this is a pseudocode for clarity
{
return "There was an error!";
}
});
return "There were no errors!";
}
我考虑过两种处理方法。第一个也是最明显的一点就是以某种方式允许“双倍回报”。我的意思是说,在回调函数中返回值将返回外壳(需要一个更好的词)功能。
第二种方式就是这样:
function MyFunction()
{
//does some stuff
var returned = ReturnRows(query, connection, function(result)
{
//... Omitted error handling
if(result == null) //this is a pseudocode for clarity
{
return "Error";
}
else
{
return "Success";
}
});
if(returned.includes("Error"))
{
return "There was an error!";
}
else
{
return "There were no errors!";
}
}
这种方法不仅笨拙,还需要绝对确保回调函数已完成执行(在此示例中,它将没有)。通常,我会将我的代码放入回调块中以确保其已执行,但是当尝试像这样返回时,显然不能。
对于刚接触节点的人是否有一个优雅的解决方案?