Подтвердить что ты не робот

У Ember Data есть дубликаты записей

В моем приложении пользователь может создать сообщение и отправить его. Когда пользователь отправляет сообщение, сообщение создается с помощью createRecord, и сервер отвечает в случае, если он создан успешно.

Кроме того, пользователь может получать сообщения от других пользователей через websocket. Когда он получает сообщение, я вставляю его в хранилище с помощью pushPayload.

var parsedData = JSON.parse(data);
this.store.pushPayload('message', parsedData);

Проблема заключается в том, что когда пользователь отправляет сообщение и сохраняет его, он также получает его обратно из websocket, и хотя оба объекта имеют одинаковый идентификатор, хранилище заканчивается дублирующимися сообщениями.

Как я могу сказать хранилище, чем когда я нажимаю или сохраняю что-то с тем же идентификатором уже существующего элемента, он должен переопределять его?

4b9b3361

Ответ 1

Единственный метод, который я нашел, чтобы избежать этой проблемы, - запустить мое обновление в новой runloop. Если задержка в ms достаточно долго, проблема не будет.

Кажется, что получение обновления из websocket и запроса почти одновременно создает условие гонки в Ember Data.

Ответ 2

Просто выполните проверку, чтобы убедиться, что модель уже находится в хранилище, прежде чем добавлять ее:

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);
}