有可能我不太了解Node的事件循环.
说我有一个包含异步函数async_func的函数foo.我有吗
//1 function foo(callback) { //stuff here async_func(function() { //do something callback(); }); //this eventually get executed }
要么
//2 function foo(callback) { //stuff here async_func(function() { //do something return callback(); }); //never executed }
解决方法
实际上,在你的样例2中,//每次都不会执行.它从回调函数返回,而不是从包装函数返回.
有时,调用者实际上期望一些返回值,并且行为可以基于此而改变.看到一个返回回调()的另一个常见的原因只是一个简单的方法来缩短你所处的功能.
function doSomething(callback) { something(function(err,data) { if(err) return callback(err); // Only run if no error }); // Always run }
即使没有使用返回值,它使用return来确保执行不会超过有条件的错误.你可以像这样很容易地写出这样的效果.
function doSomething(callback) { something(function(err,data) { if(err) { callback(err); return; } // Only run if no error }); // Always run }