>웹 프론트엔드 >JS 튜토리얼 >루프에서 약속 기반 코드의 동기 실행을 보장하는 방법은 무엇입니까?

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

Susan Sarandon
Susan Sarandon원래의
2024-10-26 19:22:30327검색

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

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

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

위 내용은 루프에서 약속 기반 코드의 동기 실행을 보장하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.