2017-06-12 11 views
0

Meine App sendet eine Benachrichtigung an den Benutzer jedes Mal, wenn ein Auto den Preis ändert. Es wird mit Code durchgeführt, der jede Stunde läuft.React-Native Update AsyncStorage Artikel

-Code ist folgende:

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); 
    } 

Zuerst es fetchs die aktuellen Daten auf meinem AsyncStorage. Wenn es Daten hat, ruft es die neuen Daten von der API ab und vergleicht danach beide Daten, und wenn es unterschiedliche Preise gibt, sendet es eine Benachrichtigung an den Benutzer.

Das Problem ist, dass ich die 'key' für jedes Auto (wenn der Preis geändert hat) mit dem neuen Preis aktualisieren, oder die App weiterhin Benachrichtigungen an den Benutzer senden wird.

Antwort

2

kann ich nicht bekommen, was ich mit AsyncStorage wollte, also musste ich einfach-store einen Wrapper namens verwenden: https://github.com/jasonmerino/react-native-simple-store

Ich hatte eine Menge Code zu ändern, aber dann die Daten, die ich ich war in der Lage zu ändern gewollt und rette es.

Mit Simple-Store speichert es jedes Auto auf einem einzelnen Array oder Objekt in der gleichen Taste, die Daten viel einfacher zu manipulieren war.