gpt4 book ai didi

node.js - 链接回调的最佳方式?

转载 作者:搜寻专家 更新时间:2023-10-31 23:44:47 26 4
gpt4 key购买 nike

我有一个关于在回调之间传递数据时将回调链接在一起的最佳方式的问题。我在下面有一个有效的例子,但有一个缺陷,即函数必须知道链并知道它们的位置/是否传递回调。

function first(data, cb1, cb2, cb3){
console.log("first()", data);
cb1(data,cb2, cb3);
}
function second(data, cb1, cb2) {
console.log("second()",data);
cb1(data, cb2);
}
function third(data, cb) {
console.log("third()",data);
cb(data);
}
function last(data) {
console.log("last() ", data);
}
first("THEDATA", second, third, last); // This work OK
first("THEDATA2", second, last); // This works OK
first("THEDATA3", second); // This doesn't work as second tries to pass on a callback that doesn't exit.

我可以想出很多方法来解决这个问题,但它们都涉及让被调用的函数知道正在发生什么。但是我的问题是我处理的真正的函数已经存在了,能避免的话我不想去修改它们。所以我想知道在如何调用这些方面我是否遗漏了一个技巧?

最佳答案

感谢您的回答,我同意 promises 可能是最合适的解决方案,因为它们满足我的要求并提供许多其他优势。

不过,我也想出了如何在不涉及任何额外模块的情况下做我想做的事。

回顾一下具体的问题是:

  • 通过回调将多个函数链接在一起(这样第一个函数就可以使用其他函数所依赖的非阻塞 I/O 调用),
  • 在它们之间传递参数(数据),并且
  • 无需修改现有函数以了解它们在回调链中的位置。

我遗漏的“技巧”是引入一些额外的匿名回调函数作为现有函数之间的链接。

// The series of functions now follow the same pattern, which is how they were before
// p1 data object and p2 is a callback, except for last().
function first(data, cb){
console.log("first()", data);
cb(data);
}
function second(data, cb) {
console.log("second()",data);
cb(data);
}
function third(data, cb) {
console.log("third()",data);
cb(data);
}
function last(data) {
console.log("last() ", data);
}

// And the named functions can be called pretty much in any order without
// the called functions knowing or caring.

// first() + last()
first("THEDATA", function (data) { // The anonymous function is called-back, receives the data,
last(data); // and calls the next function.
});

// first() + second() + last()
first("THEDATA2", function (data) {
second(data, function (data){
last(data);
}); // end second();
}); // end first();

// first() + third()! + second()! + last()
first("THEDATA3", function (data) {
third(data, function (data){
second(data, function (data){
last(data);
}); // end third();
}); // end second();
}); // end first();

关于node.js - 链接回调的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50853767/

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