API処理の順番

 

お世話になっております。

 

初心者の質問で申し訳ありません。

 

下記コードは、テーブルのフィールド項目「name」が入力されると

アプリ内項目の商品コード&配達店舗に該当する

他アプリの在庫マスタの在庫数が、アプリ内項目「stockNum」に反映される仕組みです。

処理の順番が、

「kintone.api(kintone.api.url(‘/k/v1/records’, true), ‘GET’, params, function (resp) {」の中を通らず、

一番下の「 console.log(row.value[‘stockNum’].value);」まで流れてから、

「kintone.api(kintone.api.url(‘/k/v1/records’, true), ‘GET’, params, function (resp) {」の中の処理を行います。

 

書いたコードを上から下まで順番通りに処理できるといいのですが…

原因をご教授いただければ幸いです。

 

kintone.events.on('app.record.create.change.name', function (event) {

    var row = event.changes.row;

    var field = event.changes.field;

    var record = event.record;

    var code = row.value['code'].value;

    var deliStore = record.deliStore.value;

    // リクエストボディにセット

    var params = {

        'app': 308,

        // 商品コード&配達店舗の在庫数を取得する

        'query': 'code = "' + code + '" and deliStore = "' + deliStore + '"'

    }

    // REST APIでルックアップ先のレコードを1件取得

    kintone.api(kintone.api.url('/k/v1/records', true), 'GET', params, function (resp) {

        if (resp.records.length === 1) {

            var setRecord = kintone.app.record.get();

            // 取得したレコードの値をルックアップ元にセット

            row.value['stockNum'].value = resp['records'][0]['zaiko']['value'];

            // マスタに該当レコードがなかった場合のエラー表示

        } else {

            var errorDisplayField = kintone.app.record.getSpaceElement('error_display_field');

            errorDisplayField.parentNode.style.width = '250px';

            // 文字列要素

            var errorDisplayDiv = document.createElement('div');

            errorDisplayDiv.style.backgroundColor = '#ffd78c';

            errorDisplayDiv.innerHTML = '該当データがありませんでした。';

            errorDisplayField.appendChild(errorDisplayDiv);

        }

    });

    console.log(row.value['stockNum'].value);

    return event;

});

 

 

 

以上、よろしくお願いいたします。

kintone.apiは非同期処理となるので提示頂いたコードだと、たしかに先にconsole.logが行われてしまいますね。

  1. kintone.apiなどを実行するときその動作が終わるのを待つなどはPromiseを利用するのが定石
       今回はこれに該当しないですが今後必要になったら詳細はこちらをみてみてください。 kintoneにおけるPromiseの書き方の基本
  2. ただし今回ChangeイベントなのでPromiseは利用できない(ChangeイベントのみPromiseは非対応)
       成功時のCallback内でkintone.app.record.set()を利用することで反映できるとおもいます

 

 

@村濱一樹 さま

ご教授いただきありがとうございました。

処理の順番はいまだに謎ですが、

値反映についてはkintone.app.record.set()を利用し、解決いたしました。

ありがとうございました。