在哪里把回报放在node.js的callback周围

一点背景; 我使用node.js,发现通过在asynchronous代码中返回所有callback可以避免许多错误。 例如:

function useMyAsyncFunc(stuff, c, callback) myAsyncFunc(stuff.a, stuff.b, c, function (error, data) { if (error) { return callback(error); } // Long body of code in here. return callback(null, data); }); } 

我的问题是,考虑到callback链可能相当大,或者会这样做,最好这样做

 function useMyAsyncFunc(stuff, c, callback) myAsyncFunc(stuff.a, stuff.b, c, function (error, data) { if (error) { callback(error); return; } // Long body of code in here. callback(null, data); return; }); } 

更有效率?

更明确地说,节点是否从后者中受益,在哪里被告知忽略callback函数的返回值?

我同样同意,一般来说,“return callback()”不会对性能和“callback(); return;”产生显着的影响。 我决定与testing“process.nextTick(… cb …); return;”一起testing。

试试下面的代码:

 'use strict'; var showComments = 0; var counter = 10000; var ab = process.argv[2]; function a(x, cb) { var myCB = function (err, result) { x = result; } x *= 1.01; if (showComments) console.log('start counter =', counter, ', x = ', x); if (--counter > 0) a(x, myCB); if (showComments) console.log("cb'ing"); switch (ab) { case 'a': return cb(undefined, x); case 'b': cb(undefined, x); return; case 'c': process.nextTick(function () { cb(undefined, x); }); return; default: console.log('Oops! Try typing "node testReturnCallBack.js [a|b|c]"'); process.exit(1); } } var start = (new Date()).getTime(); a(1, function (err, result) { console.log('final result = ', result); var finish = (new Date()).getTime(); var diff = finish - start; console.log('run took %d milliseconds', diff); }); 

而且你应该看到情况'a'和'b'多次运行基本上同时以毫秒为单位,而计算值保持不变。 同时,案例“c”花费了大约50%的时间。