一些背景知识;我使用node.js,发现通过在异步代码中返回所有回调可以避免许多错误。例如:
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);
});
}
我的问题是,考虑到回调链可能相当大,执行上述操作会更好吗?
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;
});
}
提高效率?
更明确地说, Node 是否从后者中受益,即被告知忽略回调函数的返回值?
最佳答案
我同样同意,一般来说,与“callback(); return;”相比,“return callback()”不会造成任何损害,也不会显着影响性能。我决定在测试“process.nextTick(... cb ...); return;”的同时对其进行测试。
尝试以下代码:
'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%。
关于javascript - 在 Node.js 的回调周围放置返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12843675/