function arrange(name: string) {
const tasks = [];
tasks.push(() => {
console.log(`${name} is notified`);
});
function wait(time: number) {
tasks.push(
() =>
new Promise(resolve => {
setTimeout(resolve, time * 1000);
})
);
return this;
}
function doSomething(taskName: string) {
tasks.push(() => console.log(`${taskName} start`));
return this;
}
function waitFirst(time: number) {
tasks.unshift(
() =>
new Promise(resolve => {
setTimeout(resolve, time * 1000);
})
);
return this;
}
async function execute() {
for (const t of tasks) {
await t();
}
return this;
}
return {
wait,
do: doSomething,
waitFirst,
execute,
};
}
arrange('zhangsan').wait(5).do('commit').waitFirst(3).execute();