gpt4 book ai didi

具有相同上下文的javascript调用函数数组

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

我正在尝试创建一个回调函数,或者至少我是这样命名的。主要目的是从具有相同上下文的数组中调用函数,并能够从当前正在执行的函数中调用数组中的下一个函数。

这是我想出的代码:

function callCallbackChain(context, callbackChain, params) {
callbackChain.push(function () {
return true;
});
for (var i = 0, len = callbackChain.length - 1; i < len; i++) {
var cb = callbackChain[i];
var next = callbackChain[i + 1];
if (typeof cb === "function") {
cb.apply(context, [next].concat(params));
}
}
}
var callbackChain = [
function (next, foo) {
console.log('1 function call', arguments);
this.innerHTML = this.innerHTML + "function called + context:" + foo + "<br>";
next()
},
function (next, foo) {
console.log('2 function call', arguments);
this.innerHTML = this.innerHTML + "function called + context:" + foo + "<br>";
next()
},
function (next, foo) {
console.log('3 function call', arguments);
this.innerHTML = this.innerHTML + "function called + context:" + foo + "<br>";
next()
}
];


var d = document.querySelector("#conent");
callCallbackChain(d, callbackChain, ["param from the main function"]);
<div id="conent">
Initial Content

</div>

我似乎无法正确设置next 函数。它有点像中间件。

最佳答案

您的 next 函数实际上不能是链中的下一个函数。

它的意图是运行下一个函数。

function run(context, chain, params) {
var inner_run = (context, chain, params, index) => {
next = () => inner_run(context, chain, params, index + 1);
if (index < chain.length) chain[index].apply(context, [next].concat(params));
};
inner_run(context, chain, params, 0);
}

var chain = [
function (next, foo) {
this.first = true
console.log('first', arguments);
next()
},
function (next, foo) {
this.second = true
console.log('second', arguments);
// not calling next()
},
function (next, foo) {
this.third = true
console.log('third', arguments);
next()
}
];

var context = {};

run(context, chain, ["param"]);

console.log('context', context);

关于具有相同上下文的javascript调用函数数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41145536/

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