js 并发处理数组导致数据重复

业务有点类似聊天软件。
有一个数组,存放联系人列表
当接收到到新消息时,需要判断消息的主人在不在联系人列表中,如果有,置顶,否则新建。
现在的问题是,当同时接收到大量消息时,在判断和插入间隔,又有判断,导致数据重复插入。

主要代码逻辑:

getMessage() {
  for (...) {
  // 遍历数组,判断联系人是否存在

  // 如果找到, 在原索引处删除, 在新索引处添加
    contacts.splice(index, 1)
    contacts.splice(newindex, 0, item)
  // 如果没找到,在索引处添加
    contacts.splice(newindex, 0, item)
  }

}

第一条消息到达后,进入方法,遍历数组...这时第二条消息来了,也进入方法,造成数据重复插入。
感谢阅读。

阅读 3.2k
4 个回答

这个问题应该在数据库层面解决吧

一个节流函数就搞定了。
每次消息到达时,不要立即更新数组,延迟一段时间,判断是否有其他消息,有的话就合并两次消息后,再执行插入。

我是把联系人列表弄成键值对了,就没有索引这些问题了,增删改查方便的多

消息来,进队列,处理联系人 从 队列里取数据,
生产者/消费者 模式就行了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题