【发布时间】:2019-10-24 12:17:17
【问题描述】:
我正在尝试按顺序执行函数(同步/异步)的以下数组(避免回调地狱),实现函数runCallbacksInSequence(我需要实现自己的函数以了解回调如何工作并避免使用异步。 js)。
这是我目前所拥有的。函数runCallbacksInSequence 运行良好,直到它多次获得相同的callback。它停止并且不会继续执行下一个回调。理想情况下,如果它多次获得相同的callback,则不应第二次执行它并继续下一个callback。
如果您有任何想法,请告诉我我做错了什么以及如何解决它。 - 没有承诺和异步/等待
function first(cb) {
setTimeout(function() {
console.log('first()');
cb(null, 'one');
}, 0);
}
function second(cb) {
setTimeout(function() {
console.log('second()');
cb(null, 'two');
}, 100);
}
function third(cb) {
setTimeout(function() {
console.log('third()');
cb(null, 'three');
}, 0);
}
function last(cb) {
console.log('last()');
cb(null, 'lastCall');
}
const cache = {};
function runCallbacksInSequence(fns, cb) {
fns.reduce(
function(r, f) {
return function(k) {
return r(function() {
if (cache[f]) {
return;
// f(function(e, x) {
// e ? cb(e) : k(x);
// });
} else {
cache[f] = f;
return f(function(e, x) {
return e ? cb(e) : k(x);
});
}
});
};
},
function(k) {
return k();
}
)(function(r) {
return cb(null, r);
});
}
const fns = [first, second, third, second, last];
runCallbacksInSequence(fns, function(err, results) {
if (err) return console.log('error: ' + err.message);
console.log(results);
});
【问题讨论】:
标签: javascript