forEach는 return을 무시한다.

박정빈·2024년 7월 7일

배열 programs의 값들을 검사해서 같은 것이 있으면 return 해주는 api를 만들었다.

하지만 같은 것이 있어도 return하지 않는 문제가 발생하였다.

import { NextResponse } from "next/server";
import programs from "@/../public/list/programs.json";
export async function POST(request: Request) {
  const { search } = await request.json();
  programs.programs.forEach((v) => {
    if (removeSpaces(v) === removeSpaces(search)) {
      return NextResponse.json(
        { message: "found", program: v },
        { status: 200 }
      );
    }
  });
  return NextResponse.json({ message: "not found" }, { status: 200 });
}
const removeSpaces = (v: string): string => {
  return v.replace(/\s+/g, "");
};

이유는 forEach 루프에서 returnforEach 함수 자체를 종료하지 않기 때문이다.
forEach는 콜백 함수에서 반환된 값을 무시하고 다음 반복으로 계속 진행한다.
따라서, NextResponse.json이 호출되더라도 POST 함수는 forEach가 끝날 때까지 계속 실행된다.

배열 안에서 같은 것을 찾는 방법을 바꾸어 해결한다.

const foundProgram = programs.programs.find((v) => {
    return removeSpaces(v) === removeSpaces(search);
  });

이 방법을 사용하면 첫 번째 항목이 바로 return 되므로 다른 결과를 얻고 싶다면, for 루프를 사용해야한다.

0개의 댓글