> 웹 프론트엔드 > JS 튜토리얼 > 일련의 약속을 순서대로 실행하고 거부를 처리하는 방법은 무엇입니까?

일련의 약속을 순서대로 실행하고 거부를 처리하는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2024-11-24 13:18:11
원래의
1001명이 탐색했습니다.

How to Execute a Sequence of Promises in Order and Handle Rejections?

Promise 시퀀스를 동기화하는 방법

이 시나리오에서는 다음을 확인해야 합니다.

  • Promise가 동일한 방식으로 해결됩니다. 배열에 나열되는 순서입니다.
  • 어떤 요소라도 거부되면 전체 시퀀스가 거부합니다.

이에 대한 직접 내장 솔루션은 없지만 이 동작을 달성하는 방법은 다음과 같습니다.

재귀를 사용한 수동 반복:

function sequence(arr) {
  const index = 0;

  function next() {
    if (index < arr.length) {
      arr[index]().then(next).catch(reject);
      index++;
    }
  }
  next();
}
로그인 후 복사

사용 줄이기:

function sequence(arr) {
  return arr.reduce((p, item) => {
    return p.then(() => item()); // Assuming each element is a promise-returning function
  }, Promise.resolve());
}
로그인 후 복사

Promise.mapSeries 사용:

Bluebird Promise 라이브러리를 사용하는 경우 Promise.mapSeries 메서드를 활용할 수 있습니다.

function sequence(arr) {
  return Promise.mapSeries(arr, item => item());
}
로그인 후 복사

ES7 사용 비동기/대기:

지원되는 경우 async/await를 사용하여 이를 달성할 수 있습니다.

async function sequence(arr) {
  const results = [];
  for (let item of arr) {
    results.push(await item());
  }
  return results;
}
로그인 후 복사

spex 라이브러리 사용:

spex 라이브러리는 동적 시퀀스를 반복할 수 있는 시퀀스 방법을 제공합니다. promise:

import { sequence } from 'spex';

function sequence(nextPromise) {
  // while nextPromise() creates and returns another promise, continue resolving it;
}
로그인 후 복사

배열의 요소 중 하나라도 거부되면 해당 거부가 발생하는 즉시 시퀀스가 ​​거부된다는 점을 기억하세요. 이 동작을 통해 추가 요소가 처리되지 않습니다.

위 내용은 일련의 약속을 순서대로 실행하고 거부를 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿