【发布时间】:2021-02-19 10:17:19
【问题描述】:
//已删除问题。问题输入错误
【问题讨论】:
-
不是直接运行代码,您需要将每个方法放在一个自定义队列中,该队列独立于原始调用进行处理。
标签: javascript
//已删除问题。问题输入错误
【问题讨论】:
标签: javascript
您可以为您的“任务队列”做出承诺,因此任何需要完成的事情都将通过.then() 添加到那里。这提供了一个流畅的 API 来安排事情。
function lazyMan(name, logFn) {
logFn(name);
let taskQueue = Promise.resolve();
const addTask = f => {
taskQueue = taskQueue.then(f);
}
return {
eat: function(val) {
addTask(() => console.log(`Eating [${val}]`));
return this;
},
sleep: function(timer) {
addTask(() => new Promise((resolve, reject) => {
console.log(`Start sleeping for ${timer} seconds`);
setTimeout(() => {
console.log(`End sleeping for ${timer} seconds`);
resolve();
}, timer * 1000);
}))
return this;
}
};
}
lazyMan("John", console.log)
.eat("banana")
.sleep(5)
.eat("apple");
请注意,此更改意味着每个操作在技术上都是异步的。不过,这至少是统一的,所以记住这一点时,惊喜的可能性较小。
【讨论】: