为了账号安全,请及时绑定邮箱和手机立即绑定

使用reduce组合无限的函数调用链

使用reduce组合无限的函数调用链

富国沪深 2019-03-14 14:15:15
一个对象, 对象中有before与enter方法, 其中 before 可以执行异步任务, 完成后执行回调再进入enter. 现在可能有若干个这样的对象,要求按顺序依次执行下来. 示例如下:var a = {    before: function(obj, next) {        console.log("a before!");        setTimeout(function() {            next(obj);        }, 1000);        return false;    },    enter: function(obj) {        console.log("a entered!");    }};var b = {    parent: a,    before: function(obj, next) {        console.log("b before!");        setTimeout(function() {            next(obj);        }, 1000);        return false;    },    enter: function(obj) {        console.log("b entered!");    }};var c = {    parent: b,    before: function(obj, next) {        console.log("c before!");        setTimeout(function() {            next(obj);        }, 1000);        return false;    },    enter: function(obj) {        console.log(" c entered!", obj);    }};// 组装后的函数var fnChain = function(obj) {    a.before(obj, function(obj) {        a.enter(obj);        b.before(obj, function(obj) {            b.enter(obj);            c.before(obj, function(obj) {                c.enter(obj);            });        });    });};fnChain({ Status: 1, Data: { name: "Anonymous" } });示例中的 fnChain 是我手写出来的, 现实中不能这样. 我想实现一个函数, 可以根据对象队列, 自动生成这个 fnChain比如我已经有这么一个队列, 然后传给那个函数:var arr = [d, c, b, a];getFnChain(arr); // 得到一个 fnChain怎么实现这个 getFnChain 呢? 我有一个初步想法是依靠 reduce, 但不幸的是我试了半天, 头都晕了, 也没想出来 ╮(╯Д╰)╭ . 看来对 reduce的理解还差得远.希望有大神能帮助我. 可以参照示例代码中的 fnChain , 这就是我最终想获得的 函数能顺带讲一下原理就更好了 (눈_눈)
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 348 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信