前言
题目如下,arrange
加入初始任务,do
追加任务,wait
等待,waitFirst
初始等待,execute()
时依次执行任务。
实现
需要将所有任务记录到数组中,execute()时依次触发。
function arrange(taskId) {
const tasks = []
tasks.push(() => {
console.log(`${taskId} is notified`)
})
function doSomething(something) {
tasks.push(() => {
console.log(`Start to ${something}`)
})
return this
}
function wait(duration) {
tasks.push(() => {
return new Promise((resolve) => {
setTimeout(resolve, duration * 1000)
})
})
return this
}
function waitFirst(duration) {
tasks.unshift(() => {
return new Promise((resolve) => {
setTimeout(resolve, duration * 1000)
})
})
return this
}
async function execute() {
for (const t of tasks) {
await t()
}
}
return {
do: doSomething,
wait,
waitFirst,
execute,
}
}
arrange("TBC").wait(2).do("干饭").do("如厕").execute()