Skip to content

📚 3.重复执行函数

💻 代码实现

typescript
// 基于 tapable 思想,构造异步任务串
// https://juejin.cn/post/6844903700872298510
const repeat = (cb, delay = 1000, times = 5) => {
    /* 高阶函数 */
    return function (text) {
        const AsyncFn = () =>
            new Promise((resolve) => {
                setTimeout(() => {
                    cb(text)
                    resolve()
                }, delay)
            })

        // 构建异步任务串
        new Array(times).fill(AsyncFn).reduce((acc, cur) => {
            return acc.then(() => cur())
        }, Promise.resolve())
        // ps: polifill如下
        // return Promise.resolve().then(() => AsyncFn()).then(() => AsyncFn()).then(() => AsyncFn()).then(() => AsyncFn())
    }
}

const mockLog = repeat(console.log)

mockLog("Hello world!!")

Released under the MIT License.