フィールド値によって、スペースに作ったボタンの表示/非表示を制御したい

API初挑戦で行き詰ってしまいました・・・
特定のフィールド値によって、スペース上のボタン表示非表示を制御する条件に挑戦しております。
管理しやすくするためにログインユーザーが特定の所属だったらの指定にAPIで所属コードを取得したコーディングを試してますがうまく機能してくれません。alertで所属コードは正しく拾ってはいるようですが、下記の9999じゃなかったらボタンは非表示にはなってくれないようです。
特定のユーザ名だったら「if (user !== ‘〇〇さん’ && user !== ‘××さん’) {」では問題ないので、そもそもこういう使い方はできないのでしょうか・・・

同じように部署だけでなくロールに所属してる場合も同じように悩んでまして色々試してみてます。ご教授いただければ幸いです、よろしくお願いいたします・・・

  var events = [
    'app.record.edit.show', 
    'app.record.edit.submit', 
  ];
  
  kintone.events.on(['app.record.edit.show'], event => {
  
  //↓からテストで所属コードは拾えること確認
 var user_organization,
     userAPI = kintone.getLoginUser();
     
     kintone.api('/v1/user/organizations','GET',{
     code:userAPI.code
     },function(resp){
      user_organization = resp.organizationTitles[0].organization.code;    
     //user_dept = resp.groups[0].groups.code;
      alert('あなたの所属組織コードは' + user_organization + 'です。');
      });
  
    //ボタンを置いたスペースフィールドを取ってきた
    const sp = kintone.app.record.getSpaceElement('spSuteki');
    const btn = document.createElement('button');
    const user = kintone.getLoginUser().name;  

      //ログインユーザが管理者以外はボタン非表示

      if (user_organization !== '9999'){          // ログインユーザーが管理者(所属コード:9999)じゃなかったら
       sp.parentNode.style.display = 'none';      // 非表示
      } else {
       sp.parentNode.style.display = null;        // 表示
      }

    btn.textContent = 'ボタン名';
    sp.appendChild(btn);

    btn.onclick = () => { ・・・

コード拝見するに、処理の順番として

  1. kintone.apiが呼び出される
  2. 1が返ってくる前に当該if文に進む
  3. 1が帰ってきてコールバック内のalertが表示される

という流れになってしまってるからだとおもいます。
ちょっとこれだけでは意味わかりづらいとおもうんですけど、
JSの場合はkintone.apiなどの通信がはいったとき処理をまって次に進む、ということをやってくれないので書き方をかえる必要があります

対処法

  1. Callback内で完結させる
    • alertの直後の行くらいで該当のif文書けば動くと思います
  2. async/awaitを使う

mura殿
ありがとうございます!
async/awaitを身につけるべく試してみたいと思います
後程結果報告します、よろしくお願いいたします!

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。