"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 루프에서 약속 기반 코드의 동기 실행을 보장하는 방법은 무엇입니까?

루프에서 약속 기반 코드의 동기 실행을 보장하는 방법은 무엇입니까?

2024-11-04에 게시됨
검색:415

How to Ensure Synchronous Execution of Promise-Based Code in a Loop?

프로미스 기반 코드가 동기식으로 실행되도록 올바른 루프 구조 찾기

프로미스 기반 코드로 작업할 때 올바른 루프 구조는 다음과 같습니다. 비동기 작업의 동기 실행을 보장하는 데 필수적입니다. 주어진 시나리오에서 목표는 각 반복 중에 "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