Javascript 将回调传递给深度嵌套函数的最佳实践
在深度嵌套的node js函数结构中,向深层传递回调的最佳方式是什么?我这里有大约4层,它开始失控,并污染函数签名 generic.jsJavascript 将回调传递给深度嵌套函数的最佳实践,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
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,它是一个处理嵌套调用的模块。不要使用回调。追求承诺。为什么回调是一个对象,它应该做什么?您应该将函数用作回调。回调是一个对象,因为它允许我将回调打包成一个实体,并将其传递到链上,而不是将每个回调作为单个函数参数。