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

标签 javascript arrays middleware

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

这是我想出的代码:

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/

相关文章:

javascript - 如何使用 underscore.js 汇总数据点?

javascript - 表格中只有第一行按钮起作用

java - 使用另一个方法中的数组元素

python - 仅从提到关键字的字符串中提取数字

java - ESB 与服务

Javascript反序列化返回类名而不是实际对象

javascript - 在 IE11 上单击文件时如何触发保存目标?

node.js - 创建一个中间件函数来检查用户角色是否等于 'Admin'

c++ - 创建二维数组并在每个数据槽中填充不同字符的最简单方法是什么?

php - 中间件取消路由前的 Silex 应用程序