2017-01-11 2 views
2

Ich bin sicher, es ist etwas Kleines, dass ich vermisse, und ich werde der Erste sein, der Ihnen sagen, ich bin kein Angular oder ES6 Experte. Ich habe den folgenden Code Set:Kann nicht Klassenvariablen in Angular 2 Inside Callback setzen

getScanner(){ 
    var that = this; 
    cordova.plugins.barcodeScanner.scan(
     function (result) { 
      console.log("OBJ "+result); 

      that.data = result; 

      //THIS IS DEFINED 
      console.log("That data first is "+that.data); 

      alert("We got a barcode\n" + 
        "Result: " + result.text + "\n" + 
        "Format: " + result.format + "\n" + 
        "Cancelled: " + result.cancelled);    
     }, 
     function (error) { 
      alert("Scanning failed: " + error); 
     } 
    ); 

    //THIS IS UNDEFINED 
    console.log("That data is finally "+that.data); 

} 

Wie man oben sehen kann, wenn ich zum ersten Mal in der Callback-Set that.data, es an die Konsole fein gedruckt. Dann verliert es irgendwie die Referenz, sobald ich zur Konsole.log außerhalb des Cordova-Anrufs komme. Was mache ich falsch?

+0

Wo ist das Versprechen? Anscheinend verwenden Sie Rückrufe. –

+0

Dieser ganze Ausschnitt cordova.plugins.barcodeScanner.scan ist direkt von ihrem Beispiel. Dies ist die Plugin-API. Das einzige, was ich geschrieben habe, waren die Konsolenprotokolle und Variablen. –

+0

Okay, aber es gibt kein Versprechen irgendwo, obwohl es eine gute Idee wäre, es zu promitifizieren, um es einfacher zu machen, den Code zu schreiben! –

Antwort

5

Der Aufruf cordova.plugins.barcodeScanner.scan ist asynchron, daher wird erst nach dem Aufruf des Erfolgsrückrufs definiert.

Wenn Sie Ihre Konsole aussehen, sollten Sie feststellen, dass die "That data is finally" Nachricht vor die "That data first is" Nachricht protokolliert.

+0

Ich folge, aber was ist der richtige Weg, um diese.data nach dem Erfolg zu verwenden? –

+1

Sie würden es im Erfolgshandler verwenden. – cartant

+0

Dies half mir, eine Lösung für mein Problem zu finden. Danke vielmals! –

Verwandte Themen