見出し画像

Lightning Web ComponentsのApexクラス呼び出し方法

Lightining Web Componentsで、Apexクラスを呼び出すときに、気を付けることがあります。

Apexクラスは非同期だと言うこと、Promiseで結果が返ってくると言うことです。

これを、ソースコードで説明すると以下のようになります。

import ApexMethod from '@salesforce/apex/ApexClass.ApexMethod';

handleOKClick(event) {
   // Apexクラスのメソッドを呼び出す
   ApexMethod({param: 1})
   .then((result) => {
       // Apexクラスメソッド呼び出し結果が返ってきたときの処理
   })
   .catch((error) => {
       // エラー処理
  });
}

Apexクラスの呼び出しが1回で終わるとこれでいいかもしれません。

では、3つのApexMethodを呼び出す必要がある場合はどうでしょう?

import ApexMethod1 from '@salesforce/apex/ApexClass.ApexMethod1';
import ApexMethod2 from '@salesforce/apex/ApexClass.ApexMethod2';
import ApexMethod3 from '@salesforce/apex/ApexClass.ApexMethod3';

handleOKClick(event) {
   // Apexクラスのメソッドを呼び出す
   ApexMethod1({param: 1})
   .then((result1) => {
       // ApexMethod1の呼び出し結果が返ってきたときの処理
       // Apexクラスのメソッドを呼び出す
       ApexMethod2({param: 2})
       .then((result2) => {
           // ApexMethod2の呼び出し結果が返ってきたときの処理
           // Apexクラスのメソッドを呼び出す
           ApexMethod3({param: 3})
           .then((result3) => {
               // ApexMethod3の呼び出し結果が返ってきたときの処理
           })
           .catch((error2) => {
               // エラー処理
           });
       })
       .catch((error2) => {
           // エラー処理
       });
   })
   .catch((error1) => {
       // エラー処理
  });
}

どうでしょう?大変な感じがしませんか?

Apexクラス側で工夫するというのも一つの手段です。

これをLightning Web Componentsだけですっきりさせる方法があります。

Promiseで返ってくると言うことは、非同期関数の中で待ち合わせてもいいと言うことです。

つまり、async関数の中で、awaitしても同じ結果になると言うことです。

先ほどの処理を、async/awaitで書き直してみます。

import ApexMethod1 from '@salesforce/apex/ApexClass.ApexMethod1';
import ApexMethod2 from '@salesforce/apex/ApexClass.ApexMethod2';
import ApexMethod3 from '@salesforce/apex/ApexClass.ApexMethod3';

async handleOKClick(event) {
   // Apexクラスのメソッドを呼び出す
   const result1 = await ApexMethod1({param: 1});
   const result2 = await ApexMethod2({param: 2});
   const result3 = await ApexMethod3({param: 3})
}

かなりすっきりします。


この記事が気に入ったらサポートをしてみませんか?