JS-Data v3.0 останавливает выполнение в хуке жизненного цикла - PullRequest
0 голосов
/ 04 октября 2018

Я использую js-data v3.0 и пытаюсь предотвратить ввод в хранилище записи, полученной от моего API, при update, если запись была изменена при сохранении.

В js-datav2.9 можно было бы прервать жизненный цикл, вызвав функцию обратного вызова с ошибкой в ​​качестве аргумента ( docs )

Теперь в v3.0 я использую ловушку жизненного цикла mapper # afterUpdate () ( документы ), но я не знаю, как прервать жизненный цикл.

1 Ответ

0 голосов
/ 04 октября 2018

Видимо, возвращение null предотвращает накопление инъекций.

Полный код для предотвращения перезаписи обратного вызова update изменений, внесенных в запись во время save():

function beforeUpdate(id, props, opts) {
  const currentStoreItem = this.datastore.get(opts.name, id)
  opts.tlChangesBeforeUpdate = JSON.stringify(currentStoreItem.changes())
  return this.constructor.prototype.beforeUpdate.call(this, id, props, opts)
}

function afterUpdate(id, props, opts, result) {
  const currentStoreItem = this.datastore.get(opts.name, id)
  const currentChanges = JSON.stringify(currentStoreItem && currentStoreItem.changes())
  if (currentChanges != opts.tlChangesBeforeUpdate) return null // This prevents store injecton
  return this.constructor.prototype.afterUpdate.call(this, id, props, opts, result)
}

const ds = new DataStore({
  mapperDefaults: {
    beforeUpdate: beforeUpdate,
    afterUpdate: afterUpdate,
  },
})
...