Мое приложение отправляет уведомление пользователю каждый раз, когда автомобиль меняет цену. Это делается с кодом, который запускается каждый час.
Код:
backgroundData(){
BackgroundTimer.setInterval(() => {
AsyncStorage.getItem('key').then(JSON.parse).then(items => {
this.setState({value: items});
})
if(!this.state.value == 0 || !this.state.value == null){
const promises = this.state.value.map((item, index) =>
fetch('URL/GetDetalhesViatura?CarID=${item[0]}')
.then(response => response.json())
)
Promise.all(promises).then(viaturas => this.setState({viaturas: flatten(viaturas)}))
const newItem = []
this.state.viaturas.map((item, index) =>
newItem.push([item.Preco, item.CodViatura]),
this.setState({ stateArray: newItem })
)
const newItem2 = []
this.state.value.map((item, index) =>
newItem2.push([item[1], item[0]]),
this.setState({stateArray2: newItem2})
)
var results = new Array();
//CODE TO CHECK ARRAYS FOR DIFFERENT PRICES
this.setState({results: results})
if(!this.state.results == 0 || !this.state.results == null){
const promises = this.state.results.map((item, index) =>
fetch('URL/GetDetalhesViatura?CarID=${item[1]}')
.then(response => response.json())
)
Promise.all(promises).then(viaturas2 => this.setState({viaturas2: flatten(viaturas2)}))
this.state.viaturas2.map((item, index) =>
PushNotification.localNotification({
message: "Notification",
})
)
}
} else {
console.log('empty')
}
}, 9999999);
}
Сначала он извлекает текущие данные в моем AsyncStorage. Если у него есть данные, он извлекает новые данные из API, и после этого сравнивает обе даты и, если есть разные цены, он отправляет уведомление пользователю.
Проблема в том, что мне нужно обновить 'key'
для каждого автомобиля (если цена изменилась) с новой ценой, или приложение будет продолжать отправлять уведомления пользователю.
Я не мог получить то, что хотел с AsyncStorage, поэтому мне пришлось использовать обертку под названием simple-store: https://github.com/jasonmerino/react-native-simple-store
Мне пришлось изменить много кода, но потом я смог изменить нужные данные и сохранить их.
Благодаря простому хранилищу он сохраняет каждый автомобиль на отдельном массиве или объекте в одном и том же ключе, что намного легче манипулировать данными.