考虑以下关于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中似乎不起作用。有什么建议吗?
最佳答案
您不需要任何信号量或锁定。
相反,您应该缓存异步承诺而不是最终值:
getChannelType(channel: string): Promise<string> {
if (!this.channelCache.hasOwnProperty(channel)) {
channelCache[channel] = this._deviceService.GetChannelSetting(channel);
}
return channelCache[channel];
}
关于javascript - 填充缓存的数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51365864/