编辑:使用promises更改了答案建议的代码。它会在Added all tags
之前打印,然后在各种Found
我有以下代码用Firebase中的某些键填充数组:
var userTags = [];
var arrayPromises = [];
user_pref.once('value', function(preferenze){
preferenze.forEach(function(t){
ref.once('value', function(tags){
arrayPromises.push(arrayPromises.push(new Promise(function (resolve, reject) {
tags.forEach(function (t1){
if(t.key == t1.key){
console.log("Found " + t1.key)
}
return false;
})}));
})
return false;
})
})
Promise.all(arrayPromises).then(()=>{
console.log("Added all tags")
})
}
我添加了then
子句,以确保在填充数组后调用方法findPoiByTag
,但显然then
内的代码在其余部分之前执行。实际上,消息lenght 2:
在另一条消息Lenght
之前打印,结果是它首先打印“0”然后在填充数组时打印正确的长度。
编辑:它打印数组的长度的时间等于forEach迭代的次数,因此return false
语句不会破坏循环。
我一直用这种方法等待指令完成,为什么现在不工作?我错过了什么吗?
答案 0 :(得分:1)
哦,我现在看到,那么函数是在push函数之后,而不是forEach所以你将不得不做这样的事情
var arrayPromises = []
forEach(
push(
...
generatePromise
...
).then(
...
promiseRecieved
checkForAllPromisesRecieved(doTheThing)
... ) )
function doTheThing(){
this.myTags = userTags;
console.log("Lenght 2: " + userTags.length)
this.findPoiByTag(this.myTags);
}