어떻게 코딩합니까?
// The source data type coming to be transformed
interface ISourceData {
id: number;
name: string;
email: string;
country: string;
active: boolean;
isPro: boolean;
}
// The data that will be loaded to the db
interface ITargetData extends ISourceData {
modifiedBy: string;
modifiedOn: string;
createdBy: string;
createdOn: string;
isValid: boolean;
}
초기 개발 기간 동안 다음과 같이 코드를 작성했을 것입니다.
class Transformation {
public async transform(data: ISourceData[]) {
const transformedData = data.map((item) => {
let isValid = false;
if (item.active === true && item.isPro === true) {
isValid = true;
}
const modifiedBy = "System1";
const modifiedOn = new Date().toDateString();
const createdBy = "System1";
const createdOn = new Date().toDateString();
return {
id: item.id,
name: item.name,
email: item.email,
country: item.country,
active: item.active,
isPro: item.isPro,
isValid: isValid,
modifiedBy: modifiedBy,
modifiedOn: modifiedOn,
createdBy: createdBy,
createdOn: createdOn,
} as ITargetData;
});
// Loading the data to database
transformedData.forEach(async (item) => await loadToDb(item));
}
}
이 코드에는 한 가지 주요 문제가 있으며 훨씬 더 나은 방법으로 작성할 수 있습니다.
Issue:
async-await does not work withforEach
. So the flow will not be asynchronous.
이제 코드를 작성하는 방법은 다음과 같습니다. 필요한 경우 개선하겠습니다.
const CREATED_BY_USER = "System1";
class Transformation2 {
public async transform(data: ISourceData[]) {
for (const item of data) {
const transformedData = this.getTransformedData(item);
await this.loadToDb(transformedData)
}
}
private getTransformedData(sourceData: ISourceData): ITargetData {
return {
...sourceData,
...this.getIsValid(sourceData.active, sourceData.isPro),
...this.generateDefaults(),
} as ITargetData;
}
private getIsValid(active: boolean, isPro: boolean) {
return { isValid: active && isPro };
}
private generateDefaults() {
const transformationDate: string = new Date().toISOString();
return {
modifiedBy: CREATED_BY_USER,
modifiedOn: transformationDate,
createdBy: CREATED_BY_USER,
createdOn: transformationDate,
};
}
private async loadToDb(data: ITargetData): Promise<void>{
// logic to load the data to database
}
}
확연히 차이가 나는 것을 볼 수 있으며,
게시물이 마음에 들면 더 많은 것을 위해 나를 따르십시오.
라훌 라즈 팔로우
I am a developer who is trying to improve myself day by day.
Reference
이 문제에 관하여(어떻게 코딩합니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rahulrajrd/how-i-code-5c2d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)