2017-12-12 1 views
0

EDIT : 약속을 사용하여 답변에서 제안한대로 코드를 변경했습니다. 그것은 Added all tags 전에 인쇄 한 후 다양한 Foundjavascript - "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 문이 루프를 손상시키지 않습니다.

저는 항상이 방법을 사용하여 지침이 완료 될 때까지 기다렸습니다. 왜 지금 작동하지 않는 겁니까? 내가 뭐 놓친 거 없니?

답변

1

아 글쎄 참조 이제 다음 기능을 사용하면 나는 그것이 나에게 오류를 제공 "거짓 반환"를 삭제하면이

var arrayPromises = [] 
forEach( 
push( 
... 
generatePromise 
... 
).then( 
... 
promiseRecieved 
checkForAllPromisesRecieved(doTheThing) 
...)) 

function doTheThing(){ 
    this.myTags = userTags; 
    console.log("Lenght 2: " + userTags.length) 
    this.findPoiByTag(this.myTags); 
} 
+0

처럼 뭔가를해야 있도록 푸시 기능은 foreach 문을 afther하지 이후 나는 부울을 돌려줘야한다고 말했습니다. – User999

+0

필자는 이전과 마찬가지로이 코드를 사용했습니다. Firebase 사용에는이 구문이 필요합니다. false를 반환하면 정상적으로 중지되지 않습니다. 또한 첫 번째 반복 후에 실제로 반환 될 경우 배열의 길이를 한 번만 인쇄하고 모든 반복에 대해 인쇄합니다. – User999

+0

아 글쎄 지금 참조 다음 기능이 var에 arrayPromises의 =처럼 뭔가를해야 있도록 푸시 기능은 foreach 문을 afther하지 이후 [] 대해 forEach ( 푸시 ( ... generatePromise .. . ) 그 때는 ( ... 이 ... 을 promiseRecieved) ) // 모든 약속 후 this.myTags = userTags; console.log ("Lenght 2 :"+ userTags.length) this.findPoiByTag (this.myTags); – LPZadkiel

관련 문제