2017-05-11 4 views
0

In meinem Code zur nächsten Funktion fortfahren unten Ich möchte möchteIonic 3 beenden eine Funktion vor

this.storage.set ("location", JSON.stringify(lsd_info)); 

, bevor Sie fortfahren zu

this.driveTo(); 

beenden Ich glaube, ich sollte mit .then werden (). Ich frage mich, gibt es eine einfache Lösung, um ein Ereignis zu beenden, bevor Sie fortfahren.

getLoc() { 
    let a = this.data.lsd; 
    let b = this.data.sec; 
    let c = this.data.twp; 
    let d = this.data.rng; 
    let e = this.data.mrd; 

    this.http.get('https://www.reversegeocoder.com/api/v1/PrivateID/lsd/' + a + '-' + b + '-' + c + '-' + d + ' ' + e) 
    .map(res => res.json()) 
    .subscribe (data => { 
     let lsd_info = { 
      latitude: data[0].response.lat, 
      longitude: data[0].response.lng, 
     }; 

     let lsd_error = {error: data[0].response.err}; 
     this.ErrorResponse = (JSON.stringify(data[0].response.err)); 
     this.ErrorText = this.ErrorResponse.replace('[','').replace(']',''); 
     this.storage.set ("location", JSON.stringify(lsd_info)); 

     //finish storage.set before proceeding 

     this.driveTo(); 

     }, 
      err => { 
       console.log('error'); 
      } 
    ); 
} 

driveTo() { 
    this.navCtrl.push(Drive); 
} 

Oder haben zwei Funktionen, bei denen auf die Funktion beendet, bevor

heißt getLoc fortfahren() und dann driveTo()

+0

Was macht 'this.storage.set'? – echonax

+0

@echonax Es wird ein Schlüssel-Wert-Paar entweder in der 'SQLite'-Datenbank des Geräts oder des lokalen Speichers ein Schlüssel-Wert-Paar im Browser setzen, abhängig von der Plattform, in der die App läuft, indem 'ionen-native',' Storage' verwendet wird Plugin. – rmalviya

+0

@echonax Sie können die Dokumentation zum ionischen Speicher [hier] (https://ionicframework.com/docs/storage/) einsehen. – rmalviya

Antwort

2

Ihre Vermutung richtig ist. Sie sollten verwenden, um Ihren Code einzugeben, der ausgeführt werden soll, sobald das ionische storage das Schlüssel/Wert-Paar festgelegt hat, da ionic storage eine Zusage zurückgibt, die aufgelöst wird, wenn der Schlüsselwert festgelegt wurde. Ich habe Ihren Code geändert und die Lösung ist einfach genug.

getLoc() { 
let a = this.data.lsd; 
let b = this.data.sec; 
let c = this.data.twp; 
let d = this.data.rng; 
let e = this.data.mrd; 

this.http.get('https://www.reversegeocoder.com/api/v1/PrivateID/lsd/' + a + 
'-' + b + '-' + c + '-' + d + ' ' + e) 
.map(res => res.json()) 
.subscribe (data => { 
    let lsd_info = { 
     latitude: data[0].response.lat, 
     longitude: data[0].response.lng, 
    }; 

    let lsd_error = {error: data[0].response.err}; 
    this.ErrorResponse = (JSON.stringify(data[0].response.err)); 
    this.ErrorText = this.ErrorResponse.replace('[','').replace(']',''); 
    this.storage.set ("location", JSON.stringify(lsd_info)).then(
    (value) => { 
     // storage.set finished 
     this.driveTo(); 
    }, 
    (reason) => { 
     console.log('Error occurred.'); 
     console.warn(reason); 
    }); 

    }, 
     err => { 
      console.log('error'); 
     } 
    ); 
} 

driveTo() { 
    this.navCtrl.push(Drive); 
} 
+0

Danke. Was mich gestolpert hat, ist der (Wert-) Teil von .then(). Ich verstehe, wenn ich es mit einem http get benutze. Aber ich bin mir nicht sicher, was in diesem Beispiel ist. –

+0

'http.get()' gibt ein "beobachtbares" und kein "Versprechen" zurück. Lesen Sie die [this] (http://stackoverflow.com/questions/37364973/angular-promise-vs-observable) Frage, um Unterschiede zu verstehen. – rmalviya

Verwandte Themen