-
Notifications
You must be signed in to change notification settings - Fork 1
Open
Description
有这样一段代码:
let t1 = setTimeout(() => {
console.log(1)
let t2 = setTimeout(() => {
console.log(2)
let t3 = setTimeout(() => {
console.log(3)
}, 3000)
}, 2000)
}, 1000)这段代码将会在 1s、3s 和 6s 时分别打印 1、2、3。当定时器过多时,这种嵌套会导致代码臃肿。为了解决这个问题,思路就是如何实现定时器链式调用。
提起链式调用就会想到 ES6 中的 Promise.then,所以问题就是怎么把每个定时器转换为 Promise。默认情况下,每一个 .then() 方法还会返回一个新生成的 promise 对象,这个对象可被用作链式调用。
将一个定时器转换为 Promise 其实就是常见的 sleep 方法:
let sleep = function (time = 0) {
return new Promise(resolve => setTimeout(resolve, time))
}接下来要做的事情就是自定义 .then 方法的返回值,为了实现定时器链式调用需要直接返回 sleep。
let t = sleep(1000).then(() => {
console.log(1)
return sleep(2000)
}).then(() => {
console.log(2)
return sleep(3000)
}).then(() => {
console.log(3)
})Metadata
Metadata
Assignees
Labels
No labels