我试图按顺序执行函数(sync / async)的以下数组(避免callbackHell),实现函数runCallbacksInSequence
(我需要实现自己的函数以了解回调的工作原理并避免使用Async.js)。
这是我到目前为止所拥有的。函数runCallbacksInSequence
运作良好,直到第二次获得相同的回调cb(null, 'one');
为止。理想情况下,如果它多次获得相同的回调,则不应第二次执行并忽略它。
如果您有任何想法,请告诉我如何实施。 -没有承诺和异步/等待
function first(cb) {
setTimeout(function() {
console.log('first()');
cb(null, 'one');
cb(null, 'one');//not supposed to be execute by runCallbacksInSequence
}, 0);
}
function last(cb) {
console.log('last()');
cb(null, 'lastCall');
}
function runCallbacksInSequence(fns, cb) {
fns.reduce(
(r, f) => {
return k => {
return r(() => {
return f((e, x) => {
return e ? cb(e) : k(x);
});
});
};
},
k => {
return k();
}
)(r => {
return cb(null, r);
});
}
fns = [first, last];
runCallbacksInSequence(fns, function(err, results) {
if (err) return console.log('error: ' + err.message);
console.log(results);
});