【问题标题】:Unable to set class level variable in Angular 2 Inside Callback无法在 Angular 2 Inside Callback 中设置类级别变量
【发布时间】:2017-01-11 20:18:31
【问题描述】:

我确定这是我遗漏的一些小东西,我会第一个告诉你我不是 Angular 或 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,它就会以某种方式失去参考。我做错了什么?

【问题讨论】:

  • 承诺在哪里?看起来你正在使用回调。
  • 整个 sn-p cordova.plugins.barcodeScanner.scan 直接来自他们的示例。这是插件API。我唯一写的是控制台日志和变量。
  • 好的,但是没有任何承诺,即使承诺它以使编写代码更容易是个好主意!

标签: angular ecmascript-6


【解决方案1】:

cordova.plugins.barcodeScanner.scan 调用是异步的,所以 that.data 在调用成功回调之后才会被定义。

如果您查看控制台,您应该注意到"That data is finally" 消息被记录在"That data first is" 消息之前。

【讨论】:

  • 我正在关注,但是成功完成后使用that.data的正确方法是什么?
  • 你会在成功处理程序中使用它。
  • 这帮助我找到了解决问题的方法。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2011-01-30
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 2017-04-14
  • 1970-01-01
  • 2018-01-04
相关资源
最近更新 更多