next+ts

next+ts 16일차 login saga비동기 처리

멈추지않아 2022. 4. 28. 16:23

오늘은 Saga비동기 처리중에 간단한 오류를 엄청 고민하고 겨우 해결했습니다.

LoginSaga

import axios from "axios";
import { call, put, takeEvery, takeLatest } from "redux-saga/effects";
import { LOGIN_PENDING, LOGIN_SUCCESS } from "../actions/actionTypes";
import { LoginData, LoginJson } from "../types/state";

const checkdata = async () => {
  const res = await axios.get(
  );
  console.log(res);

  return res.data;
};
function* checklogin({ type, payload }: { type: String; payload: LoginData }) {
  try {
    const data: LoginJson = yield call(checkdata);
    data.login.find((res: LoginData) => {
      if (res.id == payload.id && res.password == payload.password) {
        payload.id = res.id;
        payload.password = "true";
        console.log(res.id == payload.id);
        return res;
      }
    });
    console.log(payload.password);
    yield put({ type: LOGIN_SUCCESS, payload });
  } catch (e) {
    console.log(e);
  }
}
export default function* watchLogin() {
  yield takeLatest(LOGIN_PENDING, checklogin);
}

data.ts

이렇게 데이터를 받아와서 아이디와 비밀번호가 같으면  payload.password 를 true로 바꺼서  Success로 넘겨서 해결했습니다.

그리고 checklogin 함수에서 payload만 필요하다고 payload만 가져와서 타입 정해주고 하면 오류가 나더라고요 type도 꼭 설정해주세요

그리고  하던도중에 자꾸 pending이 무한 반복되길래 2시간 정도  찾아봤는데

actiontypees.ts에서

export const LOGIN_SUCCESS = "caremaker/LOGIN_PENDING"
이렇게 작성해놔서 무한 루프더라고요... 생각도못하고 계속 찾았습니다. 그래서 다시 고쳐줬습니다.

그리고find함수는 return 기준으로 실행이되요 if문 끝나고 return하면 if문은 실행이 안됩니다.