填充缓存的数据

时间:2018-07-16 15:58:53

标签: javascript

考虑以下有关javascript中查询功能的缓存

channelCache={};
async getChannelType(channel: string): Promise<string> {
    if (!this.channelCache.hasOwnProperty(channel)) {
         channelCache[channel] = await this._deviceService.GetChannelSetting(channel);
     }
     return channelCache[channel];
}

这很好用,但是在我的代码中有一种情况,这种情况一个接一个地被调用100次。问题是所有100次都超过了if语句并开始查询服务。我想在if语句周围使用某种互斥机制,一次只允许1个查询运行。

我已经尝试过prex信号量,但是在IE 11中似乎不起作用。

1 个答案:

答案 0 :(得分:1)

您不需要任何信号量或锁定。

相反,您应该缓存异步承诺而不是最终值:

getChannelType(channel: string): Promise<string> {
    if (!this.channelCache.hasOwnProperty(channel)) {
         channelCache[channel] = this._deviceService.GetChannelSetting(channel);
     }
     return channelCache[channel];
}