无法在回调中设置Angular 2中的类级别变量
我肯定我遗漏了一些小东西,我会第一个告诉你我不是角型或ES6专家。我有以下代码集:无法在回调中设置Angular 2中的类级别变量,angular,ecmascript-6,Angular,Ecmascript 6,我肯定我遗漏了一些小东西,我会第一个告诉你我不是角型或ES6专家。我有以下代码集: getScanner(){ var that = this; cordova.plugins.barcodeScanner.scan( function (result) { console.log("OBJ "+result); that.data = result; //THIS IS DEFINED
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时,不知何故它就失去了引用。我做错了什么?cordova.plugins.barcodeScanner.scan调用是异步的,因此调用成功回调后才会定义.data
如果您查看控制台,您应该注意到,
“该数据最终为”
消息记录在“该数据首先为”
消息之前。承诺在哪里?看起来您正在使用回调。整个代码段cordova.plugins.barcodeScanner.scan直接来自他们的示例。这是插件api。我唯一写的是控制台日志和变量。好吧,但没有任何承诺,即使它是一个好主意,让它更容易编写代码!我正在关注,但成功完成后使用该.data的正确方法是什么?您可以在成功处理程序中使用它。这有助于我找到问题的解决方案。谢谢!