async/await를 이용할 수는 없나요?
258
작성한 질문수 4
L.reduce를 async함수로 리팩토링하려고 하고 있습니다.
다음은 제가 구현한 코드입니다.
L.filter = L.curry(function* (f, iterable) {
// for (const e of iterable) if (f(e)) yield e;
for (const e of iterable) {
const result = L.branch(e, f);
if (result instanceof Promise) yield result.then((val) => val ? e : Promise.reject(L.nop));
else if (result) yield e;
}
});
L.reduce = L.curry(async (f, acc, iter) => {
if (!iter) {
iter = acc[Symbol.iterator]();
acc = await iter.next().value;
}
for (const e of iter) {
try {
acc = await f(acc, await e);
} catch (err) {
if (err === L.nop) acc = await f(acc, e);
if (err !== L.nop) return Promise.reject(err);
}
}
return acc;
})
위 코드를 이용해 영상의 예제를 다음과 같이 실행하면 결과가 다음과 같이 나옵니다.
const L = require("./myUtils.js");
L.go(
[Promise.resolve(1), Promise.resolve(2), Promise.resolve(3), Promise.resolve(4), Promise.resolve(5), Promise.resolve(6)],
L.filter(val => !(val % 2)),
L.reduce((acc, val) => acc + val),
console.log
).catch(console.log);
// 출력 : 2[object Promise]4[object Promise]6
어떻게 수정하면 좋을까요..?
답변 1
3
if (err === L.nop) acc = await f(acc, e);
우선 이 부분이 잘못되었어요.
그리고 위 코드를 작성함에 있어 async await 를 사용하게 되면 Promise가 생기지 않는 상황에서도 항상 비동기로 랩핑되기 때문에 동기만 있는 상황에서는 꽤 느려지는 문제가 있어요.
무조건 비동기 방식으로 동작하는 함수를 작성하는데 있어서는 문제가 없구요.
async await 를 사용하지 말라는 이야기가 아니니 오해하시지 말길 바래요.
본 강의에서의 함수는 두 상황에서 다 적절하게 동작하는 함수를 만드는데 목적을 가지고 있어요.
그리고 앞으로 앱을 만드는 코드에서 async await를 잘 사용할 수 있게 하기 위한 목적도 가지고 있구요.
감사합니다.
프론트엔드 실무에서 어떤때에 쓰이는지 궁금합니다
1
111
1
함수형 프로그래밍 심화 강의 자료 추천
0
72
2
함수형 자바스크립트 프로그래밍 책
0
54
1
filter가 아무것도 걸러내지 못하는 경우
0
114
1
take 함수의 성능적면에서의 이점
1
463
1
pipe함수
1
531
1
Identity 함수
0
450
1
함수형 프로그래밍이란
0
832
1
reduce 예제 코드 제안!
0
405
1
fxts를 배워보려고 합니다.
1
537
1
flatMap 관련 질문드립니다~
1
444
1
다용성이 높은 L.flatMap
0
358
1
변수에 재 할당 금지~
0
540
1
DevTools라고 옆에 결과 확인하는거 어떻게 하나요?
0
483
2
소요시간에 관해서 질문드립니다
1
458
1
join에 대한 내용이 궁금증이 해결되지 않아서 질문드립니다!
0
465
2
reduce에 L.range를 사용할 때
0
527
2
[이해내용 공유] Lazy 에서 C.reduce가 병렬 효과를 내는 이유
3
739
2
제가 이해한 C.Reduce와 Reduce의 동작 차이 정리
2
787
3
go, pipe 함수 관련하여 질문 드립니다.
1
499
1
안녕하세요 강사님!
0
380
2
fxts에 go가 없는 이유?
0
840
1
비동기 관련 질문입니다!
0
462
1
질문 있습니다.
0
517
1





