我有这段代码:
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
答案 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']);
}
}
});
});