需求:js实现一个LazyMan,能按以下方式调用:
> LazyMan(“hank”).sleepFirst(2).eat(“晚餐”)
在两秒后打印出
我睡了2秒
你好,我是hank
吃晚餐
<script>
LazyMan = (name) => {
var queue = []
const task = () => { console.log(`你好,我是${name}`); next() }
queue.push(task)
const next = () => {
const first = queue.shift();
first?.();//等同于first&&first()
}
var api = {
_x: queue,
sleep(n) {
return api
},
eat(type) {
const task = () => { console.log(`吃${type}`); next() }
queue.push(task)
return api
},
sleepFirst(n) {
const task = () => {
setTimeout(() => {
console.log(`我睡了${n}秒`);
next()
}, n * 1000)
}
queue.unshift(task)
return api
}
}
setTimeout(() => { next() }, 0)
return api
}
LazyMan("hank").sleepFirst(2).eat("晚餐");
// 沉默2秒
// 我睡了2秒
// 你好,我是hank
// 吃午餐
</script>