gpt4 book ai didi

javascript - Javascript 中的链式回调可读性?

转载 作者:行者123 更新时间:2023-11-29 17:27:21 25 4
gpt4 key购买 nike

编写一系列深度嵌套回调的最佳方式是什么?

您有多个函数,每个函数都执行异步操作,并且取决于前一个函数的输出。对于两个函数,这通常看起来像 foo(bar)

一长串回调看起来像 foo(bar(baz(qux(...))))。这很快就会变得很难阅读,更不用说维护了。特别是一旦你开始将额外的参数传递给函数调用! Step对此进行了一些改进,但为每个函数调用添加了一个额外的参数。

This post (第 3.1 节)建议使用一个等待函数,其用法如下:wait(foo, qux) 并支持多个依赖关系,如下所示:wait([foo, bar, baz], qux) 。不幸的是,这对嵌套回调没有帮助。

步进和等待都有一点帮助,但似乎都不理想。有没有更好的方法来编写长回调链?

最佳答案

在函数式编程中有函数调用 compose,它从两个函数 f o g = f(g(x))

创建新的函数组合
function compose(f, g) {
return function() {
//apply is use to pass multiple arguments to function g
return f(g.apply(null, Array.prototype.slice.call(arguments, 0)));
};
}

并且如果您还从函数式编程范例中获得了 reduce 函数。

// this function need at least 2 arguments and it don't check if you pass 
// one element array or empty array.
function reduce(fun, array) {
var result = fun(array[0], array[1]);
for (var i=2; i<array.length; ++i) {
result = fun(result, array[i]);
}
return result;
}

你可以使用上面的两个创建链函数

function chain() {
return reduce(compose, arguments);
}

你可以使用 chain 创建一个函数链的新函数

var quux = chain(foo, bar, baz);//quux is function that call foo(bar(baz(...)));

你也可以将它作为回调参数传递给另一个函数

some_function(chain(foo, bar, baz, quux));

在这种情况下,some_function 获取回调函数作为参数。

关于javascript - Javascript 中的链式回调可读性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7544249/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com