Javascript 使用node.js将返回放在哪里

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

一点背景;我使用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 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忽略回调的任何可能返回值,而我不确定前者是否需要大量的开销来自行计算。