Ember 数据有重复记录

Ember Data has duplicate records

在我的应用中,用户可以创建消息并发送。当用户发送消息时,消息被创建 createRecord 并且服务器回复 201 Created if successful.

此外,用户可以通过 websocket 从其他用户那里获取消息。当它收到一条消息时,我用 pushPayload.

将它推入商店
var parsedData = JSON.parse(data);
this.store.pushPayload('message', parsedData);

问题是,当用户发送一条消息并保存它时,他们也会从 websocket 中取回它,即使两个对象具有相同的 id,存储也会以重复的消息结束。

当我推送或保存与现有元素具有相同 ID 的内容时,我该如何告诉商店,它应该覆盖它?

只需在添加之前检查该模型是否已在商店中:

var parsedData = JSON.parse(data);
if(this.store.hasRecordForId ('typeOfYourRecord', parsedData.id)){
    // logic you want to run when the model is already in the store
    var existingItem = this.store.find('typeOfYourRecord', parsedData.id);
    // perform updates using returned data here
} else {
    this.store.pushPayload('message', parsedData);
}

我发现避免此问题的唯一方法是 运行 我在新的 运行 循环中进行更新。如果ms延迟足够长,就不会出现这个问题。

似乎几乎同时接收来自 websocket 的更新和请求在 Ember 数据中创建了竞争条件。