【问题标题】:Twilio Function - Sync Data MutationTwilio 函数 - 同步数据变异
【发布时间】:2019-07-10 19:58:10
【问题描述】:

如何修改以下内容以使并发写入失败(使用 If-Match 和 ETag 标头)?

let sync = Runtime.getSync();
exports.handler = function(context, event, callback) {
  let map = sync.syncMaps("MyMap");
  map.syncMapItems(event.Digits).fetch().then(item => {
      map.syncMapItems(event.Digits).update({key: item.key, data:item.data + 1})
      .then(item2 => {
      }).catch(err => {
        console.log("Update Error:" + err);
      });
   }).catch(err => {
       console.log("Fetch Error:" + err);
   });
}

【问题讨论】:

  • 到目前为止您尝试了哪些方法,是什么导致您遇到此问题?
  • 我已经阅读了有关 If-Match 和 ETag 标头以解决并发写入问题的信息......并且他们将添加 API 支持。我只是找不到文档。有时我会同时接到电话......两者都发出提取,都发出更新,但我失去了第一次更新的结果。典型的并发读修改写问题。有一个解决方案......我只是不知道或找不到合适的文档。
  • 那是我读过的文档……我只是找不到有关如何将其应用于同步地图项的文档。

标签: twilio twilio-functions


【解决方案1】:

这里是 Twilio 开发者宣传员。

The documentation on mutating data and protecting against conflicts in Twilio Sync 确实提到您可以使用 If-MatchETag 标头。

文档指出:

请注意,目前未在 REST 帮助程序库中启用 If-Match 标头支持。支持即将推出。

因此,如果您想使用 If-Match 标头来确保不会将冲突条目写入同步映射项,那么您需要自己构建 HTTP 请求。

the documentation for Sync Documents and If-Match 中的所有内容也适用于单个同步地图项。

用于同步地图项的 REST API 的文档包括如何构建您自己发出请求所需的 URL。

让我知道这是否有帮助,如果您自己提出请求有任何问题。

【讨论】:

  • 一个不错/干净的方法是在 Map (或其他同步对象)上有一个类似于 update 方法的 mutate 方法,但不是采用键值,而是采用一个函数作为一个论点。该函数将当前项作为参数并返回变异项。
  • 是的,尽管在处理 REST API 时,在您获取最新更新然后对其进行变异之间仍然有可能,它可能已经在引擎盖下再次更改。正如文档所说,我们希望尽快得到至少基本版本的实现。否则,请告诉我你的进展情况。
猜你喜欢
  • 2016-08-20
  • 1970-01-01
  • 1970-01-01
  • 2012-07-25
  • 1970-01-01
  • 2019-03-24
  • 1970-01-01
  • 1970-01-01
  • 2020-04-20
相关资源
最近更新 更多