Я пытаюсь выяснить, почему AsyncStorage
в приложении React Native отказывается делать mergeItem
с моими данными.Моя функция выглядит следующим образом:
const arrToObj = (array) =>
array.reduce((obj, item) => {
obj[Object.keys(item)[0]] = Object.values(item)[0]
return obj
}, {})
export const addThingToThing = async (title, thing) => {
try {
let subThings = []
let things = {}
await AsyncStorage.getItem(THINGS_STORAGE_KEY)
.then((things) => {
let subThings = []
Object.values(JSON.parse(decks))
.map((thing) => {
if (Object.keys(thing)[0] === title) {
subThings = [...Object.values(thing)[0].subThings, subThing]
}
})
return { decks, subThings }
})
.then(({ decks, subThings }) => {
const obj = {
...arrToObj(JSON.parse(things)),
[title]: {
subThings
}
}
console.log(JSON.stringify(obj))
AsyncStorage.mergeItem(THINGS_STORAGE_KEY,
JSON.stringify(obj))
})
} catch (error) {
console.log(`Error adding thing to thing: ${error.message}`)
}
}
Когда я делаю то, что выполняет это, я получаю:
13:35:52: {"test":{"subThings":[{"one":"a","two":"a"}]},"test2":{"title":"test2","questions":[]}}
13:35:55: [Unhandled promise rejection: Error: Value [{"test":{"title":"test","subThings":[]}},{"test2":{"title":"test2","subThings":[]}}] of type org.json.JSONArray cannot be converted to JSONObject]
Что сбивает с толку, потому что, когда данные выводятся на печать, это объект с{...}
, но AsyncStorage
показывает массив с [...]
.Я что-то упускаю?Мне это кажется довольно глупым, и я не могу понять, как заставить RN играть хорошо.
PS.ИМО структура данных грубая, но это то, с чем я работаю.Я не принял решение, и я не могу изменить его.