프로미스 기반 코드가 동기식으로 실행되도록 올바른 루프 구조 찾기
프로미스 기반 코드로 작업할 때 올바른 루프 구조는 다음과 같습니다. 비동기 작업의 동기 실행을 보장하는 데 필수적입니다. 주어진 시나리오에서 목표는 각 반복 중에 "db.getUser(email).then(function(res) { logger.log(res); })"의 실행을 올바른 순서로 보장하는 루프를 구성하는 것입니다.
한 가지 접근 방식은 사용자 정의 "promiseWhile" 기능을 사용합니다. 이 방법은 일반적인 시나리오에 유용할 수 있지만 특정 사례에는 불필요한 복잡성이 발생합니다. 대신, 보다 간단한 해결책은 map() 및 Reduce()와 같은 내장 배열 조작 기능을 활용하는 것입니다.
병렬 및 직렬 약속
문제는 다음과 같습니다. 응답의 순서를 유지해야 한다는 요구 사항에 따라 Array.prototype.map()을 통한 병렬 접근 방식을 사용할 필요가 없습니다. 보존된 순서로 원하는 Promise 체인을 구성하려면 Array.prototype.reduce()가 더 적합합니다.
예:
function fetchUserDetails(arr) { return arr.reduce(function(promise, email) { return promise.then(function() { return db.getUser(email).done(function(res) { logger.log(res); }); }); }, Promise.resolve()); }
이 메소드를 사용하면 "db.getUser" 호출의 실행이 연속적으로 보장되어 결과의 순서가 유지됩니다. 코드는 다음과 같이 호출할 수 있습니다.
var arrayOfEmailAddys = [...]; fetchUserDetails(arrayOfEmailAddys).then(function() { console.log('all done'); });
이 접근 방식은 복잡한 루프나 조건이 필요하지 않으며 비동기 작업을 처리할 때에도 Promise 체인의 적절한 실행을 보장합니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3