JavaScript Promise에서 Movable Type Data API에서 얻은 비동기 통신 데이터 처리

※JavaScript 의 Promise 에 대해서, 공부가 굳이 기술했습니다. 오기 등이 있으면 지적하십시오.

Movable Type Data API에서 JSON을 가져옵니다.
취득한 데이터를, JavaScript로 가공해, 표시하고 싶다. 이용하고 싶다.
그런 상황이 있다고 생각합니다.

예를 들면, API 경유로 취득한 데이터를, 다른 함수에 인도한다고 하는 시츄에이션으로 생각해 보겠습니다.
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script>

// Movable Type のData APIから、記事データを取得して、変数listに格納

 const list =  $.ajax('http://your-mt/mt-data-api.cgi/v3/sites/site_id/entries');

// 変数listを表示

 console.log(list);

</script>

이 코드에서는 Data API를 통해 얻은 기사 데이터를 console.log에 표시하려고합니다. 그러나 위의 실행 결과는 다음과 같습니다. 예상대로 기사 데이터를 표시 할 수 없습니다.



이것은
  • JavaScript에서 Data API를 사용할 때 비동기 통신으로 처리합니다.
  • JavaScript는 비동기 통신 응답을 기다리지 않고 처리를 수행합니다.
  • 결과적으로 Data API에서 가져온 데이터를 수신하기 전에 console.log가 실행됩니다.

    일로부터 일어나는 현상이 됩니다.

    비동기 통신 중 (readyState이 1 상태), 즉 통신 중 상태에서 데이터를 완전히 검색하기 전에 console.log를 실행하고 기사 데이터가 예상대로 표시되지 않음 상태가 됩니다.

    JavaScript에서는 비동기 통신으로 얻은 데이터를 처리하기 위해 Promise이라는 개념이 있습니다. Promise를 사용하면 Data API에서 검색한 데이터를 잘 처리할 수 있습니다.

    Promise의 장점



    Promise는 ECMAScript2015부터 표준 사양으로 채택되었습니다.

    Promise를 사용하면 JavaScript의 비동기 통신 결과를 기다리고 다음 처리로 데이터를 전달할 수 있습니다.

    Promise에 대한 자세한 내용은 다음 문서를 참조하시기 바랍니다.

    htps : //에서 ゔぇぺぺr. 모잖아. 오 rg / 자 / 도 CS / 우 b
    htp // 아즈. 기주 b. 이오 / p 여보 s- 보오 k /

    ※Promise는 각종 브라우저에서 이용할 수 있습니다만, IE에서는 서포트되고 있지 않습니다.

    Promise를 사용하여 Data API에서 얻은 데이터를 성공적으로 처리



    실제로 Promise를 사용하여 Movable Type의 Data API에서 데이터를 검색하고 다른 함수에 전달하여 표시합니다.

    sample-1 JavaScript SDK를 사용한 경우



    다음은 Movable Type Data API용 JavaScript SDK를 사용하여 console.log에 데이터를 전달하여 표시하는 예입니다. JavaScript SDK의 래퍼 함수 [getEntries]를 정의하여 Promise 객체를 생성합니다. Data API와의 통신이 끝나면 다음 함수인 console.log에 값을 전달하여 표시합니다.
      <script src="http://your-mt/mt-static/data-api/v3/js/mt-data-api.js"></script>
      <script>
    
        const api = new MT.DataAPI({
          baseUrl: "http://your-mt/mt-data-api.cgi",
          clientId: "your-client-id"
        });
    
    // MTのブログIDを変数 siteId に格納
        const siteId = IDの数字;
    
        function getEntries() {
          return new Promise((resolve, reject) => {
            api.listEntries(siteId, function(response) {
              resolve(response);
            });
          });
        }
    
        getEntries().then(function(response) {
          console.log(response);
        });
    
    </script>
    

    위의 코드를 실행하면 다음과 같이 JavaScript 객체 데이터가 표시됩니다. 비동기 통신의 처리를 기다리면, 취득한 데이터를 다음의 함수에 건네줄 수 있는 것을 알 수 있습니다.



    sample-2 jQuery를 사용하는 경우



    jQuery를 사용하면 다음과 같은 코드가됩니다.
    실행 결과는 sample-1과 동일합니다.
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
      <script>
    
        function getEntries() {
          return new Promise((resolve, reject) => {
            const response = $.ajax('http://your-mt/mt-data-api.cgi/v3/sites/site_id/entries')
            resolve(response);
          });
        }
        getEntries().then(function(response) {
          console.log(response);
        });
    
    </script>
    

    sample-3 Promise.resolve 사용



    jQuery의 ajax 함수는 Thenable 객체를 반환합니다. 따라서 Promise 바로 가기 Promise.resolve을 사용하여 작성할 수 있습니다.
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
      <script>
        const list = $.ajax('http://your-mt/mt-data-api.cgi/v3/sites/site_id/entries');
        Promise.resolve(list).then(function(response) {
          console.log(response);
        });
      </script>
    
    

    sample-2 보다 조금 깨끗한 쓰는 방법을 할 수 있는 것을 알 수 있습니다. 이 실행 결과는 sample-1,
    sample-2와 동일합니다.

    이번에 사용한 Movable Type Data API 엔드포인트에 대해서는 다음을 참조하십시오.

    htps //w w.ゔぁbぇtyぺ. jp/에서 ゔぉぺrs/다타아피/
    htps //w w.ゔぁbぇtyぺ. jp/로 ゔぉぺぺrs/다타아피/v3-레후페렌세. html #엔트리에 s
    htps : // 기주 b. 이 m/모ゔぁbぺtyぺ/mt-다타-아피-sdkjs/우우키/다타아피-SDK-야 파네세-MT. 다타아피
  • 좋은 웹페이지 즐겨찾기