一个对象, 对象中有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 , 这就是我最终想获得的 函数能顺带讲一下原理就更好了 (눈_눈)
添加回答
举报
0/150
提交
取消