The find method in js-data-http appears to have a special case where if item
is falsey then it will reject the promise, otherwise it returns item
. My problem is that some falsey values (0
, null
, ''
) are valid responses from my API.
For example if I ask for a relation that hasn't been set then the API responds with data null
wrapped in a jsonapi envelope. This follows the jsonapi spec for fetching empty relationships:
{
"links": {
"self": "/articles/1/relationships/author",
"related": "/articles/1/author"
},
"data": null
}
I'm using the js-data-jsonapi library to help js-data and jsonapi get along. In that library the DeSerializer unwraps the jsonapi envelop. At that point js-data is back in charge and the unwrapped data null
is the value for item
in the find promise resolve method which causes js-data-http to reject the promise.
Right now I'm taking advantage of a special case in js-data-jsonapi to deserialize null data as an array because in JS Arrays are truthy. But then I must special case the detection for hasOne relations where now an empty array must be re-converted into null.
This seems like an overly complicated way of handling things, is there a better way that I am missing?
My setup uses:
"angular": "1.5.8",
"js-data": "2.9.0",
"js-data-angular": "3.2.1",
"js-data-jsonapi": "0.0.0-alpha.21",