하나의 Firebase 데이터베이스를 거쳐 기준에 일치하는 데이터베이스 항목을 찾으려고합니다. 따라서 jQuery의 지연 객체를 사용하여 데이터베이스 호출을 처리합니다.jQuery Deferred는 루프의 마지막 값만 반환합니다.
일단이 첫 번째 데이터베이스에서 반환 값을 얻으면 첫 번째 데이터베이스의 각 값에 대해 두 번째 데이터베이스에서 사용자 정보를 가져 오려고합니다. 그리고 결과는 JSON 배열
에 추가됩니다 그래서 그 :
<search for value, find one>
<<<search other db for oher info>>>
<continue search for outer value>
하지만이 단지 반환 한 값 - 다른 모든 벌금을 실행 (콘솔 로그의 모든 정보를 올바른) 있지만. 나는 너희들이 수행하는 또는 내가이 문제를 해결 수있는 방법을 무엇에 어떤 아이디어가 희망
function find(searchLocation, profileID) {
var requestUserData = {
data: []
};
var def = $.Deferred();
//This will be executed as long as there are elements in the database that match the criteria and that haven't been loaded yet (so it's a simple loop)
Ref.orderByChild("location").equalTo(searchLocation).on("child_added", function(snapshot) {
def.ressolve(snapshot.val().ID);
});
return def.promise();
};
:
여기에 코드입니다. 미리 감사드립니다!
편집 : 추가 테스트를 통해이 문제가 이미 외부 루프에 있음을 발견 했으므로 첫 번째 값만 반환됩니다. 이 문제는 resolve() 메서드의 위치와 관련이 있다고 생각하지만이 동작을 변경하는 방법에 대한 확실성을 찾지 못했습니다.
루프에서'notify'가 완료되면'resolve'가됩니다. – Johan
이렇게하면 쿼리가 처음 실행되기 전에 resolve()가 실행되어 반환되는 빈 객체가 생깁니다. – chrissik
자세히 알아 보려면 다음을 수행하십시오. 결과 집합의 길이. 완료된 각 항목에 대해'notify()'. 집합의 전체 길이에 도달하면 지연된 객체를'resolve()'합니다. – Johan