프로미스 체인을 사용하여 동기 루프를 생성하는 방법
문제:
루프 구성 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!