如何按顺序调用 javascript 具有回调 运行 的方法数组?
How to call javascript array of methods having callbacks to run sequentially?
我有以下方法可以顺序调用。
请注意,超时是不同的,因此默认情况下它将 运行 基于超时。
function asyncTask1(done) {
setTimeout(() => {
console.log('task 1 done');
done(1);
}, 500);
}
function asyncTask2(done) {
setTimeout(() => {
console.log('task 2 done');
done(2);
}, 400);
}
function asyncTask3(done) {
setTimeout(() => {
console.log('task 3 done');
done(3);
}, 300);
}
function sequential(tasks = []) {
}
sequential(tasks);
你可以递归地做:
function sequential([first, ...last], done) {
if (!first) done();
else first(() => sequential(last, done);
}
这是一个非常有用的回复,但我花了一些时间将它们放在一起。这是正在使用的函数
function done() {
console.log("DONE")
}
var callbacks = [
function callback1(next) {
console.log("callback1")
next()
},
function callback2(next) {
console.log("callback2")
next()
},
function callback3(next) {
console.log("callback3")
next()
},
function callback4(next) {
console.log("callback4")
next()
},
function callback5(next) {
console.log("callback5")
next()
}
]
function sequential([first, ...last], done) {
if (!first)
done();
else
first(() => {sequential(last,done);})
}
//And call it.
sequential(callbacks, done);
我有以下方法可以顺序调用。
请注意,超时是不同的,因此默认情况下它将 运行 基于超时。
function asyncTask1(done) {
setTimeout(() => {
console.log('task 1 done');
done(1);
}, 500);
}
function asyncTask2(done) {
setTimeout(() => {
console.log('task 2 done');
done(2);
}, 400);
}
function asyncTask3(done) {
setTimeout(() => {
console.log('task 3 done');
done(3);
}, 300);
}
function sequential(tasks = []) {
}
sequential(tasks);
你可以递归地做:
function sequential([first, ...last], done) {
if (!first) done();
else first(() => sequential(last, done);
}
这是一个非常有用的回复,但我花了一些时间将它们放在一起。这是正在使用的函数
function done() {
console.log("DONE")
}
var callbacks = [
function callback1(next) {
console.log("callback1")
next()
},
function callback2(next) {
console.log("callback2")
next()
},
function callback3(next) {
console.log("callback3")
next()
},
function callback4(next) {
console.log("callback4")
next()
},
function callback5(next) {
console.log("callback5")
next()
}
]
function sequential([first, ...last], done) {
if (!first)
done();
else
first(() => {sequential(last,done);})
}
//And call it.
sequential(callbacks, done);