基于事件的处理程序,使用没有全局范围的缓存变量

时间:2019-01-18 05:06:39

标签: javascript

我有一个带有特定签名的函数处理程序。

例如:

const config = {
  external: () => {
    // do something
  }
}

此处理程序可以触发n次。但是,我想在此处理程序中使用一个变量,并且只触发一次并进行缓存。我不想让变量位于全局范围内的config之外。如何在不使用全局范围的情况下定义变量并将其缓存用于后续调用?

更糟糕的是,创建此缓存变量的事情是一个应许。

1 个答案:

答案 0 :(得分:0)

您可以将处理程序包装到立即调用的函数表达式中,并将缓存的promise存储在闭包中:

const config = (() => {

  let cachedPromise;

  return () => {

    if (!cachedPromise) {
      cachedPromise = new Promise(resolve => {
        setTimeout(() => {
          resolve(5);
        }, 1000)
      });
    }

    cachedPromise.then((cache) => {
      console.log(`Cached value ${cache}`);
    })
  };

})();