Ionic 3 / Angular 4:循环无法启动

时间:2017-08-27 21:16:07

标签: angular cordova typescript ionic3

我有这段代码:

    this.LocationTracking.startTracking().subscribe(data => {

    firebase.database().ref('campaigns/' + data.results[0].address_components[7].long_name).orderByKey().once("value")
      .then(function(snapshot) {
        console.log(snapshot.val())
        var childData = snapshot.val();
        this.fileNamesArr = [];
        //The following loop does not start
        for (let key in childData) {
          if (childData.hasOwnProperty(key)) {
          this.fileNamesArr.push(childData[key]['storageFileName']);
          }
        }
    });
});

我想知道为什么那里的循环没有开始。当我试图在那里登录时,我想到了这一点。我的目标是让Firebase数据库中的一些孩子将其推送到数组中。有谁知道我怎么做,或开始循环?

全球套餐:

@ionic/cli-utils : 1.2.0
Cordova CLI      : 6.5.0
Ionic CLI        : 3.2.0

本地包裹:

@ionic/app-scripts              : 1.3.7
@ionic/cli-plugin-cordova       : 1.3.0
@ionic/cli-plugin-ionic-angular : 1.3.0
Cordova Platforms               : android 6.1.2 ios 4.1.1 windows 4.4.3
Ionic Framework                 : ionic-angular 3.3.0

系统:

Node       : v7.7.1
OS         : macOS Sierra
Xcode      : Xcode 8.3.3 Build version 8E3004b
ios-deploy : not installed
ios-sim    : 5.0.13

1 个答案:

答案 0 :(得分:0)

您需要在此处使用 fat arrow function 。请尝试如下所示。

  

什么是箭头功能?箭头功能 - 也称为“胖箭”   函数,是用于编写函数表达式的更简洁的语法。   通过使用箭头函数,我们避免键入函数关键字和   大括号,他们的{this}是从周围环境中拾取的   意味着我们不再需要使用bind函数来更改上下文   功能。

     

将箭头函数与promises / callbacks一起使用的另一个好处是   它减少了围绕{this}关键字的混淆。在代码中   有多个嵌套函数,可能很难跟踪   并记住绑定正确的上下文

this.LocationTracking.startTracking().subscribe(data => {
    firebase.database().ref('campaigns/' + data.results[0].address_components[7].long_name).orderByKey().once("value")
          .then((snapshot) => {
            console.log(snapshot.val())
            var childData = snapshot.val();
            this.fileNamesArr = [];
            //The following loop does not start
            for (let key in childData) {
              if (childData.hasOwnProperty(key)) {
              this.fileNamesArr.push(childData[key]['storageFileName']);
              }
            }
        });
    });