gpt4 book ai didi

javascript - 嵌套回调

转载 作者:行者123 更新时间:2023-11-29 22:19:20 27 4
gpt4 key购买 nike

我在异步 javascript 方面经验不足。如何在不对命令数量进行硬编码或不使用 eval 的情况下调用命令?

var commands = [
// command 1: result: 0, stdout: ""
function (stdin, callback) {
callback(0, "");
},
// command 2: result: 1, stdout: ""
function (stdin, callback) {
callback(1, "");
},
// command 3: result: 0, stdout: ""
function (stdin, callback) {
callback(0, "");
},
// ...
];

var stdin = "foo";
var end = function (result, stdout) {
console.log(result);
console.log(stdout);
};

commands[0](stdin, function (result, stdout) {
commands[1](stdout, function (result, stdout) {
commands[2](stdout, end);
});
});

最佳答案

最终答案:

我正在使用递归遍历命令数组。您向循环函数传递一个命令数组和要调用的最后一个回调(您还可以将要在其中开始循环的数组的索引作为第四个可选参数传递 - 默认为零)。

var commands = [
// echo foo
function (stdin, callback) {
callback(0, "foo");
},
// touppercase
function (stdin, callback) {
callback(1, stdin.toUpperCase());
}
];

var stdin = "",
loop = function(commands, lastCallback, stdin, startIndex) {
(function insideLoop(i, stdout) {
commands[i](stdout, (i + 1 < commands.length) ? function(result, stdout){ insideLoop(i + 1, stdout); } : lastCallback);
})(startIndex || 0, stdin);
},
end = function (result, stdout) {
console.log(stdout);
};

loop(commands, end, stdin);

Code Example

关于javascript - 嵌套回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13293518/

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