일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 스마트 컨트렉트 함수이름 중복
- 머신러닝기초
- 러스트 기초
- ambiguous function description
- ethers typescript
- ethers v6
- 스마트컨트렉트프록시
- ethers
- 스마트컨트렉트 예약어 함수이름 중복
- chainlink 설명
- 스마트컨트렉트 함수이름 중복 호출
- vue기초
- 스마트컨트렉트테스트
- 체인의정석
- Vue.js
- git rebase
- ethers type
- 러스트 기초 학습
- multicall
- rust 기초
- 프록시배포구조
- Vue
- SBT표준
- 러스트기초
- 티스토리챌린지
- ethers websocket
- 컨트렉트 배포 자동화
- 컨트렉트 동일한 함수이름 호출
- 오블완
- nest.js설명
- Today
- Total
체인의정석
typescript 비동기/동기 처리 본문
근 몇일간 api를 리팩토링 하면서 추가 요청이 있어 동기/비동기 처리를 해주어야 하는 상황이 나오게 되었다.
자바스크립트에서는 블록체인 데이터를 주고 받는 과정에서 많은 시간 고생을 하여 익숙해졌다고 생각했으나, 타입스크립트에서 새로 사용하니 막히는 내용이 많아 정리를 하려고 한다.
우선 응답 객체값에 대한 정의가 이루어져야 하는데 이 부분을 빼먹어서 작동이 안되는 경향이 있었다.
이부분은 다음과 같이 결과 값을 지정해주는 클래스에 Promise를 명시해주는 것을 빼먹어서 작동이 안되었던 것이였다.
아래와 같이 Promise<응답값 객체>를 해주어야 비동기 처리가 가능해지게 된다.
makingResponseItemsArr = async (
transactions,
): Promise<RelatedTransactionsItems[]> => {
const promises = [];
for (const x of transactions) {
promises.push(this.relatedTransactionResponse(x));
}
const responseItemsArrRaw: RelatedTransactionsItems[] =
await Promise.all<RelatedTransactionsItems>(promises);
return responseItemsArrRaw;
};
비동기 처리에 있어서 2번째 유의사항은
바로 반복문을 사용하는 과정에서 상황에 따라 다른 반복문을 써야한다는 점이다.
아래 블로그에 정리가 잘 되어있는데
https://crmrelease.tistory.com/99
여기에 나온 경우를 외워서 그대로 사용하게 되면 비효율적인 코드가 나올 수도 있다.
위의 코드를 예시로 보자면 여기서는 for ,of 구문을 사용하여 안에 있는 명령어의 순서를 지정해주고,
실행은 동기로 하여 빠르게 처리한 후 모든 동기 처리된 실행된 응답값이 모이면 한번에 리턴해주도록
await Promise.all을 사용하였다.
이런식으로하면 일일히 promise를 걸어서 모든 작업을 비동기로 할 때보다 속도가 빨라지게 된다.
이렇게 코드를 짜게 되면, 작업을 동시에 시켜서 모든 작업이 다 완성되는 순간 답을 한번에 보내주어서 순서도 맞춰주면서 작업속도도 빠르게 올려주는 효과를 낼 수 있따.
'개발 > backend' 카테고리의 다른 글
블록체인 숫자 데이터 처리 Bignumber VS BigInt (0) | 2021.11.19 |
---|---|
Logger와 logger를 사용해야 하는 이유 (0) | 2021.11.17 |
typescript) typeORM, query Builder, 날짜 검색 구문 쓰기 (0) | 2021.11.15 |
class validator 사용하기, 다중 validation 처리하기 (0) | 2021.11.09 |
TypeORM & NestJS) Query Selector 사용하여 다수의 데이터를 가져오고 Response 구조로 다수의 데이터 응답 보내기 (0) | 2021.11.03 |