我知道这个问题有很多问题,但所有问题都是根据具体案例量身定做的。我在问这个问题,并希望得到一个每个人在调查此事时都可以使用的答案。
假设我有三个需要按顺序执行的函数,它们都执行异步操作。
对于两个函数,回调很简单:
var fOne = function(callback) {
// do stuff
callback();
};
var fTwo = function() {
// do stuff
};
通话:
fOne(fTwo);
使fTne在fOne完成后运行。如何将fThree添加到这个案例中,以便在fTwo之后运行,这是在fOne之后运行的?
答案 0 :(得分:2)
基本上,如果我理解你的问题,你会想要将lambda传递给fOne以便能够为fTwo添加参数,然后让fTwo收集回调并像fOne一样调用它。
var fOne = function(callback) {
// do stuff
callback();
};
var fTwo = function(callback) {
// do stuff
callback();
};
var fThree = function() {
// do stuff
};
fOne(function() { fTwo(fThree); }); // <- lambda
答案 1 :(得分:1)
由于你没有使用延迟和承诺来同时执行异步操作,而只是在另一个完成时启动一个,所以添加第三个几乎完全相同:
var fOne = function(callback) {
console.log('1')
callback();
};
var fTwo = function(callback) {
console.log('2')
callback();
};
var fThree = function() {
console.log('3')
};
fOne(function() {
fTwo(function() {
fThree();
});
});
答案 2 :(得分:1)
我提出了另一种方法:
var stack = [fOne, fTwo, fThree];
stack.shift()(function() {
stack.shift()(stack[0]);
});
将functins定义为:
function fOne(callback) {
setTimeout(function() { // <-- example of async task
alert('fOne done');
callback && callback();
}, 1000);
}