EDIT : 약속을 사용하여 답변에서 제안한대로 코드를 변경했습니다. 그것은 Added all tags
전에 인쇄 한 후 다양한 Found
javascript - "then"루프가 파이어베이스에서 완료되기 전에 실행
나는 중포 기지에서 일부 키 배열 채우기 위해 다음과 같은 코드를 가지고 : 나는 메소드를 호출해야하는 then
절을 추가 한
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")
})
}
을 findPoiByTag
배열을 채운 후에 호출되지만, 분명히 then
안에있는 코드는 나머지 전에 실행됩니다. 실제로 메시지 lenght 2:
은 다른 메시지 Lenght
앞에 인쇄되어 처음으로 "0"을 인쇄 한 다음 배열을 채우는 동안 올바른 길이를 인쇄합니다.
EDIT : 각 반복 횟수만큼 배열의 길이를 인쇄하므로 return false
문이 루프를 손상시키지 않습니다.
저는 항상이 방법을 사용하여 지침이 완료 될 때까지 기다렸습니다. 왜 지금 작동하지 않는 겁니까? 내가 뭐 놓친 거 없니?
처럼 뭔가를해야 있도록 푸시 기능은 foreach 문을 afther하지 이후 나는 부울을 돌려줘야한다고 말했습니다. – User999
필자는 이전과 마찬가지로이 코드를 사용했습니다. Firebase 사용에는이 구문이 필요합니다. false를 반환하면 정상적으로 중지되지 않습니다. 또한 첫 번째 반복 후에 실제로 반환 될 경우 배열의 길이를 한 번만 인쇄하고 모든 반복에 대해 인쇄합니다. – User999
아 글쎄 지금 참조 다음 기능이 var에 arrayPromises의 =처럼 뭔가를해야 있도록 푸시 기능은 foreach 문을 afther하지 이후 [] 대해 forEach ( 푸시 ( ... generatePromise .. . ) 그 때는 ( ... 이 ... 을 promiseRecieved) ) // 모든 약속 후 this.myTags = userTags; console.log ("Lenght 2 :"+ userTags.length) this.findPoiByTag (this.myTags); – LPZadkiel