kintoneUtility Library for JavaScriptを使ったレコード追加時のエラー処理について

初めまして。

当方、kintone初心者です。

現在、在庫登録のアプリを試験的に作っています。

レコード追加時に同じ商品番号を登録しようとしたときにエラーを出す処理をしたいです。

同じような事例の質問があったので確認済みですが、諸事情によりkintoneUtility Library for JavaScriptを利用しており、うまく動作しません。

エラー動作の箇所のみ切り出してみるとちゃんと動作するのでkintoneUtility Library for JavaScriptの使い方が間違っているのかもしれませんが、原因が分かりません。

ヒント的な内容でも結構ですので、ご助力いただけますと幸いです。

よろしくお願い致します。

以下コードです。

 

(function(){

    “use strict”;

    kintone.events.on(‘app.record.create.submit’,function(event){

        

        //今入力してる商品番号

        let itemNumber = event.record[‘itemNumber’].value;

        console.log(itemNumber);

        let param = {

            app:kintone.app.getId(),

            records:‘itemNumber’

        };

        

            kintoneUtility.rest.getRecords(param)

            .then(function(resp) {

                

                //登録済みの商品番号を持ってくる。

                let num = [];

                for (let i = 0; i < resp.records.length; i++) {

                    num.push(resp.records[i].itemNumber.value);

                }

            

                //レコードと被ったらエラー判定

                if(num.indexOf(itemNumber) != -1){

                    throw new Error();

                };

            })

            

            .catch(function() {

               // エラー時の処理を記載する

               console.log(‘NG’);

               event.error = ‘すでに存在します。’;

               return event;

                

            });

    });

})();

こんにちは!

おそらく・・・ですが、

 kintoneUtility.rest.getRecords(param)

~~

の中身が動いている間に、プログラムが終わっているのではないかと思います。

event.error = ‘すでに存在します’;

の頃にはプログラムが下まで行ってしまっているというか・・・。

 

別のトピックですが、こんな感じに 

 kintoneUtility.rest.getRecords(param) のまえにreturnつけてみるとかどうでしょう!?

https://developer.cybozu.io/hc/ja/community/posts/360027838952-kintoneUtility-rest-getRecords%E3%81%AE%E7%B5%90%E6%9E%9C%E3%82%92%E3%83%AB%E3%83%BC%E3%83%97%E5%87%A6%E7%90%86%E3%81%97%E3%81%9F%E3%81%84

>juridon様

こんにちは!

ご返答ありがとうございます。おかげ様で期待通りに動きました。

kintoneUtility.rest.getRecords(param)~~ 内の最後にconsole.logを入れてreturnの有無で確かめたところ、

たしかに以前のコードでは出力されなかったのでおっしゃる通りの状態のようです。

自分の非同期処理についての理解が甘かったです。

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