>  기사  >  웹 프론트엔드  >  제공된 기사에 맞는 몇 가지 질문 스타일 제목은 다음과 같습니다. * Promise Chain을 사용하여 동기 실행을 달성하는 방법: 단순화된 'promiseWhile' 및 배열 감소 기술 가이드 * 에스

제공된 기사에 맞는 몇 가지 질문 스타일 제목은 다음과 같습니다. * Promise Chain을 사용하여 동기 실행을 달성하는 방법: 단순화된 'promiseWhile' 및 배열 감소 기술 가이드 * 에스

Linda Hamilton
Linda Hamilton원래의
2024-10-28 11:52:00707검색

Here are a few question-style titles that fit the provided article:

* How to Achieve Synchronous Execution with Promise Chains: A Guide to Simplified `promiseWhile` and Array Reduction Techniques
* Synchronous Promise Loops Made Easy:  `PromiseWhile` and

프로미스 체인을 사용하여 동기 루프를 생성하는 방법

문제:

루프 구성 Promise 호출과 후속 로깅 명령문의 동기 실행을 보장하는 것이 어려울 수 있습니다. 이는 Bluebird와 같은 라이브러리를 사용할 때 특히 그렇습니다.

해결책 1(단순화된 promiseWhile 함수):

<code class="javascript">var Promise = require('bluebird');

var promiseWhile = function(condition, action) {
    var resolver = Promise.defer();

    var loop = function() {
        if (!condition()) return resolver.resolve();
        return Promise.cast(action())
            .then(loop)
            .catch(resolver.reject);
    };

    loop();

    return resolver.promise;
};</code>

이 단순화된 promiseWhile 함수 버전에서는 콜백을 다음과 같이 전달해야 합니다. 조건 및 작업 매개변수에 대한 인수입니다.

해결책 2(배열 축소 사용):

대체 접근 방식은 이메일 주소 배열을 줄이고 해당하는 비동기 주소를 만드는 것입니다. 각각에 대해 호출:

<code class="javascript">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());
}</code>

이 접근 방식은 플랫 .then() 체인을 생성하고 응답의 원래 순서를 유지합니다.

사용법:

fetchUserDetails를 호출하면 이메일 주소 배열이 필요합니다.

<code class="javascript">fetchUserDetails(arrayOfEmailAddys).then(function() {
    console.log('all done');
});</code>

이 접근 방식을 사용하면 외부 카운터나 조건 기능이 필요하지 않습니다. 제한은 이메일 배열의 길이에 따라 결정됩니다.

위 내용은 제공된 기사에 맞는 몇 가지 질문 스타일 제목은 다음과 같습니다. * Promise Chain을 사용하여 동기 실행을 달성하는 방법: 단순화된 'promiseWhile' 및 배열 감소 기술 가이드 * 에스의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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