【发布时间】:2018-05-27 11:52:17
【问题描述】:
最近我遇到了一个我不知道如何解决的问题。我问了this 的问题,经过一些努力,我们发现 Firebase 对 Promise 的工作方式与普通请求不同,我无法正确使用它们。
正如the question 中所解释的,我正在用来自 Firebase 的一些信息填充一个数组,当我确定数组已填充时,我需要调用另一个方法,换句话说,当我确定对 Firebase 的调用已经完成时.
这是我现在使用的代码:
var user_pref = firebase.database().ref('/users/'+ self.api.email_id+'/preferenze/');
var ref = firebase.database().ref('/tag/')
var userTags = [];
var self1 = self;
user_pref.once('value', function(preferenze) {
preferenze.forEach(function(t) {
ref.once('value', function(tags) {
tags.forEach(function(t1) {
if (t.key == t1.key) {
console.log("Found " + t1.key)
userTags.push(t1.key)
}
return false;
});
})
return false;
});
}).then(a =>{
await this.sleep(1000) //----> WORKAROUND
console.log("Out")
this.myTags = userTags
this.findPoiByTag(this.myTags) //method I have to call when finished
})
我在 sleep 中使用了这种糟糕的解决方法,以确保外部代码在内部代码之后执行。没有它,它会先打印“Out”,然后再打印循环中的所有“Found”。我已经尝试以各种方式将它与 Promise 一起使用,但它仍然不起作用。看看docs here 我找不到任何可以帮助我的东西。
【问题讨论】:
标签: javascript firebase promise google-cloud-functions