루프에서 비동기 쿼리의 반환 데이터 해결
데이터베이스 애플리케이션에서는 루프에서 여러 쿼리를 수행하고 집계된 결과. 비동기 데이터베이스 작업을 사용할 때 반환되는 데이터를 올바르게 처리하여 코드가 응답을 보내기 전에 모든 쿼리가 완료될 때까지 기다리는 것이 중요합니다.
이 시나리오에서 코드는 MongoDB에 다중 기도를 쿼리하는 것을 목표로 합니다. 카테고리를 검색하고 카테고리 ID, 기도 횟수, 기타 세부정보가 포함된 데이터 배열을 반환합니다. 그러나 단순히 루프 내에서 반환하면 코드가 비동기 쿼리가 완료될 때까지 기다리지 않았기 때문에 정의되지 않은 값이 발생했습니다.
이 문제를 해결하려면 비동기 작업 관리에 도움이 되는 Q 라이브러리를 활용할 수 있습니다. 불행하게도 MongoDB 라이브러리의 find 메소드는 약속을 반환하지 않으므로 Q의 노드 인터페이스 도우미를 사용하여 주변에 즉각적인 래퍼를 만들어 약속을 반환하도록 보장합니다.
var find = Q.nbind(Prayer.find, Prayer);
약속의 원칙 준수 처리 과정에서 각 쿼리에 대한 Promise를 반환하도록 forEach 콜백을 수정한 다음 Q.all을 사용하여 모든 Promise가 반환될 때까지 기다립니다. 해결:
function getPrayerCount(data2) { var id = data2.id; return find({prayerCat:id}) .then(function(prayer) { if (!prayer) data2.prayersCount = 0; else data2.prayersCount = prayer.length; return data2; }); } function getPrayerInCat(data) { var promises = data.map(getPrayerCount); return Q.all(promises); }
이 접근 방식을 사용하면 코드가 집계된 데이터를 반환하기 전에 모든 쿼리가 완료될 때까지 기다려 정의되지 않은 값을 방지할 수 있습니다. 비동기 작업을 수행할 때는 Promise 처리 규칙을 준수하고 필요한 곳에 래퍼를 생성하고 Q와 같은 라이브러리를 활용하여 프로세스를 단순화하는 것이 중요합니다.
위 내용은 루프 내에서 비동기 MongoDB 쿼리의 반환 데이터를 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!