首先我要说我有解决这个问题的方法,但我很想知道是否有更好的方法,以及我是否做错了。
我在webapp的前端有一个对象表,我需要异步加载对象的一些数据,因为它是基于每个对象的需要。服务器返回包含该对象数据的JSON数组,并且数据包含对象的键,因此我可以使用其数据更新前端的对象。当没有数据时,我只得到一个空数组,遗憾的是它无法更新对象,因为我没有用它来更新它的密钥。这可能导致稍后的另一个查询,这是浪费时间/资源。我无法修改服务器,有没有办法很好地做到这一点?
我目前的解决方案是在发送请求之前将对象的数据设置为空数组,然后在结果为非空时接收结果时更新。
我想知道是否有更好/更惯用的方法来做到这一点。
作为参考,我使用Elm和PostgREST作为后端。
答案 0 :(得分:2)
您可以使用currying和partial function application来指示应更新哪个对象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添加到“失败”消息中,以获取更细粒度的错误消息。