2017-01-11 62 views
2

我確定這是我錯過的小事,我會第一個告訴你我不是Angular或ES6專家。我有以下代碼集:無法在Angular 2內部回調中設置類級別變量

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

} 

正如你可以在上面看到,當我第一次that.data回調裏面,它打印到控制檯的罰款。然後,一旦我到達Cordova調用之外的console.log,它就會失去參考。我究竟做錯了什麼?

+0

承諾在哪裏?看起來你正在使用回調。 –

+0

這整個片段cordova.plugins.barcodeScanner.scan是直接從他們的例子。這是插件API。我寫的唯一的東西是控制檯日誌和變量。 –

+0

好的,但在任何地方都沒有承諾,即使將它作出承諾以使編寫代碼變得更容易也不失爲一個好主意! –

回答

5

cordova.plugins.barcodeScanner.scan調用是異步的,所以that.data將不會被定義,直到調用成功回調之後。

如果你看看你的控制檯,你應該注意到"That data is finally"消息記錄之前"That data first is"消息。

+0

我在追隨,但成功完成後使用that.data的正確方法是什麼? –

+1

你會在成功處理程序中使用它。 – cartant

+0

這幫助我找到解決我的問題的方法。非常感謝! –