Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将回调传递给深度嵌套函数的最佳实践_Javascript_Node.js - Fatal编程技术网

Javascript 将回调传递给深度嵌套函数的最佳实践

Javascript 将回调传递给深度嵌套函数的最佳实践,javascript,node.js,Javascript,Node.js,在深度嵌套的node js函数结构中,向深层传递回调的最佳方式是什么?我这里有大约4层,它开始失控,并污染函数签名 generic.js function dumpProcessor(dump, callbacks) { var listing = callbacks.getPropertySelector(dump); callbacks.transformListingToProperty(listing); } function processDumps(dumps, c

在深度嵌套的node js函数结构中,向深层传递回调的最佳方式是什么?我这里有大约4层,它开始失控,并污染函数签名

generic.js

function dumpProcessor(dump, callbacks) {
    var listing = callbacks.getPropertySelector(dump);
    callbacks.transformListingToProperty(listing);
}

function processDumps(dumps, callbacks){
    console.log('process dumps');
    dumpProcessor(dumps, callbacks)
}

function gotTheDumps(agent, dumps, callbacks){
    endDateProperties(agent, function(){
        processDumps(dumps, callbacks);
    });
}
specific.js

function getPropertySelector() {}
function transformListingToProperty() {}

var callbacks = {
    "agent": "agent",
    "getPropertySelector": getPropertySelector,
    "transformListingToProperty": transformListingToProperty
};

abc.getDumps("AGENT", generic.gotTheDumps, callbacks);

你这里的问题不是真正的回调。事实上,您正在使用函数参数将相同的内容传递到多层。这不是回调特有的问题。这就是面向对象编程被发明的原因之一。这通常通过使用对象来避免。在许多方法签名中反复出现的函数参数被转换为对象中的字段,函数被转换为同一对象的方法。然后,您的所有方法都可以访问这些字段,您不必将它们作为函数参数反复传递

var dumper = {};
dumper.callbacks = callbacks;

dumper.dumpProcessor = function(dump) {
    var listing = this.callbacks.getPropertySelector(dump);
    this.callbacks.transformListingToProperty(listing);
 };
可以这样称呼:

dumper.dumpProcessor(someDump);

你这里的问题不是真正的回调。事实上,您正在使用函数参数将相同的内容传递到多层。这不是回调特有的问题。这就是面向对象编程被发明的原因之一。这通常通过使用对象来避免。在许多方法签名中反复出现的函数参数被转换为对象中的字段,函数被转换为同一对象的方法。然后,您的所有方法都可以访问这些字段,您不必将它们作为函数参数反复传递

var dumper = {};
dumper.callbacks = callbacks;

dumper.dumpProcessor = function(dump) {
    var listing = this.callbacks.getPropertySelector(dump);
    this.callbacks.transformListingToProperty(listing);
 };
可以这样称呼:

dumper.dumpProcessor(someDump);

您应该看看async.js,它是处理嵌套调用的模块。不要使用回调。追求承诺。为什么
回调
是一个对象,它应该做什么?您应该使用函数作为回调。回调是一个对象,因为它允许我将回调打包成一个实体并向上传递,而不是将每个回调作为单个函数参数。您应该查看async.js,它是一个处理嵌套调用的模块。不要使用回调。追求承诺。为什么
回调
是一个对象,它应该做什么?您应该将函数用作回调。回调是一个对象,因为它允许我将回调打包成一个实体,并将其传递到链上,而不是将每个回调作为单个函数参数。