考虑以下有关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中似乎不起作用。
答案 0 :(得分:1)
您不需要任何信号量或锁定。
相反,您应该缓存异步承诺而不是最终值:
getChannelType(channel: string): Promise<string> {
if (!this.channelCache.hasOwnProperty(channel)) {
channelCache[channel] = this._deviceService.GetChannelSetting(channel);
}
return channelCache[channel];
}