자바스크립트에서 Currying을 사용하여 비동기 처리를 어떻게 다룰 수 있나요?
Currying은 함수를 여러 개의 인자를 받는 대신, 하나의 인자를 받는 함수로 분해하는 기법입니다. 이를 이용하여 비동기 처리를 다룰 수 있습니다. 아래는 Currying을 사용하여 비동기 처리를 다루는 예시입니다.
// Currying 함수 정의
function curry(func) {
return function curried(...args) {
if (args.length >= func.length) {
return func.apply(this, args);
} else {
return function(...nextArgs) {
return curried.apply(this, args.concat(nextArgs));
}
}
};
}
// 비동기 처리를 위한 Promise 객체를 반환하는 함수 정의
function asyncFunction(arg1, arg2) {
return new Promise((resolve, reject) => {
// 비동기 작업 수행
setTimeout(() => {
// 작업이 성공적으로 완료되었을 경우 resolve 호출
resolve(arg1 + arg2);
// 작업이 실패했을 경우 reject 호출
// reject("An error occurred");
}, 1000);
});
}
// Currying 함수를 사용하여 비동기 처리를 다루는 함수 생성
const curriedAsyncFunction = curry(asyncFunction);
// 첫 번째 인자를 전달한 함수 호출
const promise = curriedAsyncFunction(5);
promise.then(result => {
console.log(result); // 5 + undefined = NaN
});
// 두 번째 인자를 전달한 함수 호출
const promise2 = curriedAsyncFunction(5, 10);
promise2.then(result => {
console.log(result); // 5 + 10 = 15
});
위의 예시에서는 curry
함수를 정의하여 함수를 Currying하는 기능을 추가하고, asyncFunction
함수는 비동기 처리를 위한 Promise 객체를 반환하는 함수입니다.
curriedAsyncFunction
함수를 호출할 때 첫 번째 인자를 전달하면 하나의 인자를 받는 새로운 함수가 반환됩니다. 이후에 나머지 인자를 전달하여 Promise 객체를 반환하고, .then
을 통해 비동기 작업 결과를 처리할 수 있습니다.
Currying을 통해 함수를 재사용할 수 있고, 비동기 처리를 효율적으로 관리할 수 있습니다. 이는 코드의 가독성과 유지보수성을 향상시키는데 도움이 됩니다.
#JavaScript #Currying #비동기처리