【问题标题】:Technique to get an id back with an http query when empty array is returned返回空数组时通过 http 查询获取 id 的技术
【发布时间】:2016-07-28 18:37:06
【问题描述】:

首先让我说我有解决这个问题的方法,但我很想知道是否有更好的方法,以及我是否做错了什么。

我在 web 应用程序的前端有一个对象表,我需要在每个对象的基础上异步加载对象的一些数据。服务器返回一个 JSON 数组,其中包含该对象的数据,并且数据包含该对象的键,因此我可以使用其数据更新前端的对象。当没有数据时,我只会得到一个空数组,不幸的是它无法更新对象,因为我没有更新它的密钥。这可能会导致稍后再次查询,这是浪费时间/资源。我无法修改服务器,有没有办法很好地做到这一点?

我目前的解决方案是在发送请求之前将对象的数据设置为空数组,然后如果结果为非空,则在收到结果时更新。

我想知道是否有更好/更惯用的方法来做到这一点。

作为参考,我使用 Elm 和 PostgREST 作为后端。

【问题讨论】:

    标签: http elm postgrest


    【解决方案1】:

    您可以使用柯里化和偏函数应用程序来指示应该更新哪个对象 ID。

    我假设你有一些类似的代码:

    type Msg
      = ...
      | FetchData Int
      | DataFetched [Data]
      | DataFetchFail Http.Error
    
    -- inside the update function
    update msg model =
      case msg of
        ...
        FetchData id =
          model ! [ Task.perform DataFetchFail DataFetched (Http.post ...) ]
    

    如果您定义 DataFetched 构造函数以将 ID 作为第一个参数包含在内,则无论服务器返回什么,您都可以使用部分应用程序包含 ID 以供将来查找。

    下面是与这个想法相同的代码块:

    type Msg
      = ...
      | FetchData Int
      | DataFetched Int [Data]
      | DataFetchFail Http.Error
    
    -- inside the update function
    update msg model =
      case msg of
        ...
        FetchData id =
          model ! [ Task.perform DataFetchFail (DataFetched id) (Http.post ...) ]
    

    您还可以将 ID 添加到 Fail 消息中以获得更细粒度的错误消息。

    【讨论】:

    • 好电话,应该想到的!我会更新并接受。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-28
    • 2023-04-03
    • 2018-07-29
    • 2015-10-07
    • 2016-03-24
    • 2015-11-26
    • 2018-06-12
    相关资源
    最近更新 更多