JS-Data v3.0在生命周期挂钩中停止执行

时间:2018-10-04 13:12:33

标签: jsdata lifecycle-hook

我正在使用js-data v3.0,并且如果保存时记录发生更改,我试图阻止从update上从我的API接收到的记录的存储注入。

在js-data v2.9中,可以通过调用带有错误作为参数(docs)的回调来中止生命周期

现在在v3.0中,我正在使用mapper#afterUpdate()生命周期挂钩(docs),但我不知道如何中止生命周期。

1 个答案:

答案 0 :(得分:1)

显然返回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,
  },
})