一个对象, 对象中有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 , 这就是我最终想获得的 函数
能顺带讲一下原理就更好了 (눈_눈)
相关分类