코드를 비동기로 실행하고 싶어요

조회수 305회

안녕하세요

데이터베이스에서 데이터를 찾아서 담아주고, json 형태로 응답을 하고 싶은데

데이터를 찾아서 담기도 전에 json응답이 실행 되는데 어디에await 을 사용하면 데이터를 찾고나서 응답을 할까요?

중간에 map 함수때문에 너무 어렵네요 ㅜ

원래는 함수로 만들지 않고 바로 사용 했는데 await은 함수 앞에 사용한다고해서 따로 만들어 줬습니다. 도와주세요..

응답을 하고 나서 데이터는 잘 찾아집니다.. 어떻게 변형 하면 될까요?

// 게시물 조회
router.get("/", async (req, res) => {
  const datas = await Post.findAll(
    { order: [["createdAt", "DESC"]] }
  );

  function findLike() {
    datas.map(async (e) => {
      const likeCount = await Like.findAll({ where: { postId: e.postId } });
      e.likes = likeCount.length;
    });
  }

  function response() {
    res.json({
      data: datas.map((e) => {
        return {
          postId: e.postId,
          userId: e.userId,
          nickname: e.nickname,
          title: e.title,
          createdAt: e.createdAt,
          updatedAt: e.updatedAt,
          likes: e.likes,
        };
      }),
    });
  }

  await findLike();
  await response();
});

1 답변

  • // 게시물 조회
    router.get("/", async (req, res) => {
        const datas = await Post.findAll(
          { order: [["createdAt", "DESC"]] }
        );
    
        datas.map(async (e) => {
            const likeCount = await Like.findAll({ where: { postId: e.postId } });
            e.likes = likeCount.length;
    
            res.json({
                data: datas.map((e) => {
                  return {
                    postId: e.postId,
                    userId: e.userId,
                    nickname: e.nickname,
                    title: e.title,
                    createdAt: e.createdAt,
                    updatedAt: e.updatedAt,
                    likes: e.likes,
                  }
                })
            });
        });
    
    });
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)