【kintone】async/await 로 순서대로 데이터를 취득한다

11407 단어 awaitasync금과
전회는 kintone.Promise.all 로 복수의 비동기 처리를 동시 병행으로 실행하면서, 전부 끝나면 다음의 처리를 실시···라고 하는 프로그램에 대해 썼습니다.
이번에는 async/await 로 다른 앱에서 레코드의 데이터를 가져온다는 처리(비동기 처리)를 차례로 실행하는 것에 대해 생각하고 싶습니다.

앱 준비



차례로 의미가 있는 것···라고 하면, 밀짚모 장자 정도 밖에 떠오른다.
그래서 와라시베 장자 앱을 만듭니다.
async/await를 여러 번 사용하고 싶으므로,
두 번 교환한 후 아이템을 얻는 앱을 만들고 싶습니다.



와라시베 마스터 앱



밀짚 → 귤 → 반물 → 말 → 집
라고 하는 교환을 실시하기 때문에 아래와 같은 어플리로 합니다.
「교환전」은 중복 금지로 해 둡시다.




필드 종류
필드 코드
비고


문자열(1행)
교환 전
중복 금지

문자열(1행)
교환 전



와라시베 2회 교환 앱



두 번 교환 후 물건을 표시하는 앱을 만듭니다.
조회로 방금 전의 밀짚 마스터의 「교환 전」을 취득합니다.
저장 버튼 클릭 후 2회 교환 후의 아이템이 저장되도록 하고 싶습니다.




필드 종류
필드 코드
비고


조회
교환 전
와라시베 앱의 「교환 전」을 취득

문자열(1행)
교환 2회



자바스크립트 쓰기



밀짚 → 귤 → 반물 → 말 → 집

2회 교환 후 아이템을 얻으려면
  • 조회로 아이템 취득 (예 : 귤)
  • 1. 에서 취득한 아이템으로 검색(예: 귤→반물)
  • 2. 에서 취득한 아이템으로 검색(예: 반물→말)
  • 3.에서 얻은 항목 표시

  • 의 순서로 프로그램을 실행하면 좋을 것 같습니다.

    그래서 프로그램은 다음과 같습니다.
    ※와라시베 2회 교환 앱으로 JavaScript를 업합니다.
    
    kintone.events.on(['app.record.create.submit', 'app.record.edit.submit'], async event => {
        //1回目の交換:ルックアップで取得したアイテムで検索(みかん → 反物)
        const resp1 = await kintone.api('/k/v1/records', 'GET', {'app': わらしべマスターアプリID,'query':'交換前="'+event.record.交換前.value+'"'});
        //2回目の交換:1回目の交換後アイテムで検索(反物 → 馬)
        const resp2 = await kintone.api('/k/v1/records', 'GET', {'app': わらしべマスターアプリID,'query':'交換前="'+resp1.records[0].交換後.value+'"'});
        //2回目の交換後のアイテムを表示(馬 を表示)
        event.record.交換2回.value =resp2.records[0].交換後.value;
        return event;                         
    });   
    

    완성



    귤을 선택하면 말이 표시됩니다.
    참고 : 짚 → 귤 → 반물 → 말 → 집


    kintone.Promise.all이라면 ...



    kintone.Promise.all을 사용하여 다시 작성하면 이런 느낌이 든다고 생각합니다.
    kintone.events.on(['app.record.create.submit', 'app.record.edit.submit'], event => {
        //1回目の交換:ルックアップで取得したアイテムで検索(みかん → 反物)
        const resp1 = kintone.api('/k/v1/records', 'GET', {'app': わらしべマスターアプリID,'query':'交換前="'+event.record.交換前.value+'"'});
        //2回目の交換:1回目の交換後アイテムで検索(反物 → 馬)
        const resp2 = kintone.api('/k/v1/records', 'GET', {'app': わらしべマスターアプリID,'query':'交換前="'+resp1.records[0].交換後.value+'"'});
        return kintone.Promise.all([resp1, resp2]).then(resps => { 
            console.log(resps);
            //2回目の交換後のアイテムを表示(馬 を表示)
            event.record.交換2回.value =resps[1].records[0].交換後.value;
            return event;                         
        });       
    });  
    

    kintone.Promise.all은 복수의 비동기 처리를 동시 병렬로 실행시켜, 전부 처리가 끝나면 다음에 진행한다고 하는 움직임을 했습니다. 이 예제에서 kintone.Promise.all을 사용하면 const resp2 = ~~ resp1.records[0].交換後.value ~~~에서 다음과 같은 오류가 발생합니다.
    resp1에 레코드 데이터를 가져오기 전에 resp1.records[0]의 내용에 액세스하려고 하면 오류가 발생합니다. resp1을 취득한 후에 resp2를 취득하는 순서를 지켜야 합니다. 이러한 순서가 중요한 경우는 kintone.Promise.all 가 아니라 async/await 를 사용합시다.


    요약



    async/await를 사용하여 순서대로 데이터를 검색하는 프로그램을 소개했습니다.
    순서에 관계없이 동시 병렬로 실행해도 좋을 때는 kintone.Promise.all 를 사용합시다.
    ※Promise.all 과 async/await 의 구분 포인트는 전회의 ↓이쪽을 봐 주세요 ^0^
    【kintone】 kintone.Promise.all에서 다른 앱에서 데이터를 가져 와서 계산합시다.

    약간의 「움직였다!」로부터 커스터마이즈의 즐거움을 느낄 수 있으면 기쁩니다.

    좋은 웹페이지 즐겨찾기