이 시나리오에는 배열에 지정된 정확한 순서로 해결되어야 하는 Promise 개체 배열이 있습니다. 또한, 한 요소가 거부되면 전체 체인이 즉시 거부되어 후속 요소를 해결하려는 추가 시도를 방지해야 합니다.
다음은 순차 약속 실행을 위한 수동 반복을 보여주는 예입니다.
function processArray(array, fn) { var index = 0; function next() { if (index < array.length) { fn(array[index++]).then(next); } } return next(); }
이 함수는 배열과 약속 반환 함수 fn을 인수로 사용합니다. 배열을 반복하면서 각 요소에 대해 fn을 호출하고 결과를 다음 반복에 전달합니다.
function processArray(array, fn) { return array.reduce((p, item) => { return p.then(() => { return fn(item).then((data) => { results.push(data); return results; }); }); }, Promise.resolve()); }
이 접근 방식은 Reduce() 메서드를 사용합니다. 일련의 결과를 축적합니다. 배열의 각 항목은 순차적으로 처리되며 fn에서 반환된 Promise는 반복을 진행하는 데 사용됩니다.
Bluebird Promise 라이브러리는 비동기 작업을 처리하기 위한 편리한 방법을 제공합니다. 순차 반복을 포함합니다.
Promise.mapSeries(arr, (item) => { // process each individual item here, return a promise return processItem(item); }).then((results) => { // process final results here }).catch((err) => { // process error here });
Promise.mapSeries() 메서드는 배열과 Promise 생성 함수를 가져와서 해결된 결과의 배열로 확인되는 Promise를 반환합니다.
ES7 async/await 구문을 사용하면 순차적 비동기 작업을 더 간결하고 읽기 쉬운 방식으로 작성할 수 있습니다.
async function processArray(array, fn) { let results = []; for (let i = 0; i < array.length; i++) { let r = await fn(array[i]); results.push(r); } return results; // will be resolved value of promise }
이 예에서 processArray 함수는 배열을 사용하여 fn에서 반환된 각 Promise가 해결될 때까지 루프를 일시 중지합니다.
Promise 시퀀스를 동기화하는 가장 좋은 접근 방식은 다음과 같은 요인에 따라 달라집니다. 배열의 요소, 처리 함수 fn의 복잡성, 원하는 오류 처리 동작. 더 작은 배열과 간단한 처리 기능의 경우 수동 반복이나 Bluebird의 Promise.mapSeries() 사용으로 충분할 수 있습니다. 보다 복잡한 시나리오의 경우 async/await 또는 최종 답변에 제공된 것과 같은 맞춤형 솔루션을 사용하는 것이 더 적합할 수 있습니다.
위 내용은 JavaScript에서 일련의 약속을 동기적으로 실행하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!