Javascript 使用node.js将返回放在哪里
一点背景;我使用node.js,发现通过在异步代码中返回all回调可以避免许多错误。例如:Javascript 使用node.js将返回放在哪里,javascript,node.js,Javascript,Node.js,一点背景;我使用node.js,发现通过在异步代码中返回all回调可以避免许多错误。例如: function useMyAsyncFunc(stuff, c, callback) myAsyncFunc(stuff.a, stuff.b, c, function (error, data) { if (error) { return callback(error); } // Long body of code i
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;
});
}
效率更高
更明确地说,节点是否受益于后者,后者被告知忽略回调函数的返回值?我同样同意,与“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”多次运行返回的时间基本相同(以毫秒为单位)。同时,case'c'需要花费大约50%的时间。我认为这没有什么区别。如果它是异步的,
返回值与此无关。只需删除它们。@user1689607不!回报是绝对相关的。如果不在此处返回第一个回调,则调用它两次。returncallback(…)代码>是最佳实践。@尖头你确定吗?后者明确地告诉V8忽略回调的任何可能返回值,而我不确定前者是否需要大量的开销来自行计算。