Javascript의 루프 내부 비동기 작업
3586 단어 mapnodeasyncjavascript
myIterable.map((item) => {
// task 1 - normal
// task 2 - async
})
그러나 map 메서드는 기본적으로 비동기 작업을 지원하지 않습니다. map 메서드 내에서 무언가가 비동기화되면 일부 '보류 중인 약속'을 반환합니다.
[ Promise{ <pending> },... ]
지도 메서드를 비동기식으로 만들기 위해 약속 개념으로 래핑했습니다.
논리는 세 개의 코드 블록으로 나뉩니다.
첫 번째 블록에는 약속을 반환하는
myAsyncIteration
라는 함수가 있습니다. 프라미스 내에서 비동기 작업을 수행하고 다음을 전달하여 프라미스를 해결하여 완료를 확인할 수 있습니다someData
.const myAsyncIteration = (item) =>
new Promise(async (resolve, reject) => {
// task 1 - normal
// task 2 - async
return resolve(someData)
})
두 번째 블록
myAsyncLoop
내부에서 약속을 반환하는 myIterable
에서 myAsyncIteration
의 모든 인스턴스를 매핑합니다.내부에 'n'개의 인스턴스가 있는 경우
myIterable
'n'개의 약속이 반환됩니다. 이것은 Promise.all
로 래핑되어 모든 약속이 실행되도록 하고 약속에서 해결된 데이터를 포함합니다.const myAsyncLoop = async () => {
return Promise.all(myIterable.map(async (item) =>
myAsyncIteration(item)
))
}
세 번째 블록에서는 각 약속을 해결한 후 전송된 데이터 배열을 반환하는
myAsyncLoop
를 호출합니다. someData
의 'n'개가 arrayOfSomeData
에 기여한다는 의미입니다.myAsyncLoop().then((arrayOfSomeData) => {
console.log(arrayOfSomeData)
// perform the other work
})
이런 식으로 맵 메서드 내에서 비동기 작업을 수행했습니다. 이것은 내 첫 번째 블로그 게시물입니다. 의견을 공유하고 더 나은 방법이 있으면 언급하십시오.
고맙습니다.
Reference
이 문제에 관하여(Javascript의 루프 내부 비동기 작업), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/bijishjs/async-task-inside-loop-in-javascript-30io텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)