일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- gitignore
- 프로그래머스
- AWS
- window.postMessage
- react DOM
- react-hook-form
- Route53
- react-sortable-hoc
- node
- react-admin
- readableStream
- xlsx
- react-xml-parser
- API Gateway
- 가상 DOM
- cognito
- timeinput
- electron-builder
- axios
- domtoimage
- TypeScript
- yml
- signIn
- JavaScript
- zerocho
- icrawler
- react
- jimp
- electron
- dynamodb
Archives
- Today
- Total
꾸준히 공부하는 개발자
[Node.js] bluebird.js Promise (concurrency) 본문
import Bluebird from 'bluebird'
const handlerFile = await Bluebird.map(data, item => new Bluebird(async (resolve, reject) => {
setTimeout(async () => {
try {
if (item.mainImages) await uploadToS3(item, 'mainImages', 'images', null, 'products')
setLoadingCount(prevCount => prevCount + 1)
} catch (e) {
setLoadingCount(prevCount => prevCount + 1)
item.mainImages = []
console.log(e)
}
try {
if (item.detailImages) await uploadToS3(item, 'detailImages', 'images', null, 'products')
setDetailLoadingCount(prevCount => prevCount + 1)
} catch (e) {
setDetailLoadingCount(prevCount => prevCount + 1)
item.detailImages = []
console.log(e)
}
resolve(item)
}, 0);
}), {concurrency: 15})
javascript는 다 아시듯이 단일스레드 언어이다.
한번에 많은양의 데이터를 Promise.all로 병렬로 처리하다가 s3 주소가 만료되어 에러가 나는 상황이 발생하였다.
여기서 bluebird Promise로 concurrency를 지정해줘서 일정 수 만큼만 병렬로 처리하게끔 해결해주었다.
이랬더니 왠지 100개를 한번에 병렬로 처리할 때 보다 효율도 더 늘어난 느낌이였다.
'Node.js' 카테고리의 다른 글
[Node.js] XML Parser (0) | 2019.12.20 |
---|---|
[Node.js] ReadableStream 을 이용한 dblp.xml 파일 받아오기 (0) | 2019.12.20 |
[Node.js] Jimp crop을 이용하여, 사진 자르기 (0) | 2019.11.19 |
[Node.js] Jimp 이용하여 비율에 맞게 resize (0) | 2019.11.18 |
[Node.js] local에서 blob으로 오는 xlsx 읽기 (0) | 2019.11.09 |
Comments