Promises chaining

SeoHyeonKim·2020년 7월 6일
0

Vanilla JS

목록 보기
3/4
export const Api = {

  requestQuizData() {

  return Api.get(`/quiz/quizzes/${Api.defaultQuizSlug}/`)
    .then((data) => {

      const meta = Object.assign(new Quiz(), data);

      meta.sessionKey = data["session_key"];
      meta.requireAuth = data["required_auth"];
      delete meta.session_key;
      delete meta.required_auth;
      console.log("API_meta1", meta);
      return meta;

    })
    .then((meta) => {
      return Api.get(`/quiz/sections/?quiz=${meta.slug}`)
        .then((data) => {
          meta.sections = data.results.map((i) => Section.create(i));
          console.log("API_meta2", meta);
          return meta;
        })
        .then((meta) => {

          return Api.get(`/quiz/pages/?quiz=${meta.slug}`).then((response) => {
            response.results = response.results.filter(result => result.number < 7);
            meta.pages = response.results.map((i) => Page.create(i));
            console.log("API_meta3", meta);
            return meta;
          });
        });
    })
    .catch((error) => {
      console.error("Something went wrong: " + error);
    });
  }
}
export const Api = {

  requestQuizData() {

    this.returnData = null;

    return Api.get(`/quiz/quizzes/${Api.defaultQuizSlug}/`)
      .then((quizMetaData) => {
        this.returnData = Object.assign(quizMetaData, {});
        this.returnData["sessionKey"] = quizMetaData["session_key"];
        this.returnData["required_auth"] = quizMetaData["required_auth"];

        return Api.get(`/quiz/sections/?quiz=${this.returnData.slug}`);
      })
      .then((sectionData) => {
        this.returnData["sections"] = sectionData.results.map((i) => Section.create(i));
        return Api.get(`/quiz/pages/?quiz=${this.returnData.slug}`);
      })
      .then((pageData) => {
        pageData.results = pageData.results.filter(result => result.number < 7);
        this.returnData["pages"] = pageData.results.map((i) => Page.create(i));
        return Object.assign(new Quiz(), this.returnData);
      })
      .catch((error) => {
        console.log('error', error);
      })
  }
}

chaining을 사용하면 훨씬 좋은 코드를 작성할 수 있다.

0개의 댓글