Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在回调中设置Angular 2中的类级别变量_Angular_Ecmascript 6 - Fatal编程技术网

无法在回调中设置Angular 2中的类级别变量

无法在回调中设置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

我肯定我遗漏了一些小东西,我会第一个告诉你我不是角型或ES6专家。我有以下代码集:

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的正确方法是什么?您可以在成功处理程序中使用它。这有助于我找到问题的解决方案。谢谢!