实现控制函数只执行一次的方法

108 阅读1分钟
const once = function (fn) {
    let cache = false
    return function () {
        if (!cache) {
            cache = true
            fn.call()
        }
    }
}

const resolve = once(function () {
    console.log('resolve')
})

const reject = once(function () {
    console.log('reject')
})

resolve()
resolve()
reject()
reject()

以上只会输出一个resolve和一个reject。

once 函数逻辑是传入一个函数,并返回一个新函数,利用闭包和一个标志位保证了它包装的函数只会执行一次,也就是确保 resolve 和 reject 函数只执行一次。

Vue2 在处理异步函数中,就使用了该方法以保证函数 resolve 和 reject 只执行一次。