レコードの更新失敗について

 お世話になります。
現在お客様からのカスタマイズとして対応を行っておりますが、
どうしても解消できない問題が発生していますので、是非アドバイスを
お願い致します。

使用するアプリ:(A)アプリ1、(B)マスタ

概要:CSVデータをそれぞれ取り込んだ「(A)アプリ1」と
「(B)マスタ」を比較する。
一致したデータがあれば「(B)マスタ」のデータ別にカウントを
行い、「(B)マスタの」『カウント件数』欄にカウントした数を
更新する。
一致したデータがなければ「(A)アプリ1」のレコードを削除する。

不具合の現象:「(A)アプリ1」に20件程CSVデータを読み込んだ
場合はレコードの更新・削除が行えている。
しかし、3,000件程CSVデータを読み込んだ場合は「(B)マスタ」の
レコード更新が途中までしか行えていないのか『カウント件数』が
表示されていないレコードが多い。

どうぞよろしくお願いいたします。

 function getDelRec(New_Shift,records1){
  var str = [];
  var str1 = [];
  
        if (records1 !== undefined) {
        var count = 0;
     //promiseオブジェクトを返す関数を定義
     var addPromise = function(records1) {
         return new Promise(function(resolve, reject)
         {        
          
             kintone.api(
                 //更新
                 kintone.api.url(‘/k/v1/record’, true),
                 ‘PUT’, {
                  “app”:appId_Syukei,
                  “id”:records1[count].$id.value,
                  “record”:{
                      “数値_5”:{
                          “value”:records1[count].数値_5.value  //カウント件数
                      }
                  }
              }
             ).then(function(resp){
                 console.log(“count=” + count);
                 console.log(“body1.id=” + records1[count].$id.value);
                 count+=1;
                 resolve();
             });
         }).catch(function(error){
    console.log(error);
         });
     };
     var doPromise = addPromise();
            for(var i = 0; i < records1.length; i++){
                console.log(“i=” + i); 
               
                doPromise = doPromise.then(addPromise(records1));
               
            }
        }
  
  for(var k = 0; k < New_Shift.length; k++){
   if(New_Shift[k] !== undefined){
    str.push(New_Shift[k]);
   }
  }
  
        // 100件ずつ実行
        for (var y = 0; y < parseInt(str.length / 100) + 1; y++) {
            var s_slice = 100 * y;          // slice開始位置
            var e_slice = 100 * (y + 1);    // slice終了位置
            if (str.length < e_slice) {
                e_slice = str.length;
            }
   //削除クエリ作成
   var body = {
    ‘app’: appId_Tri1,
    ‘ids’: str.slice(s_slice, e_slice)
   };
   
   //削除
   kintone.api(kintone.api.url(‘/k/v1/records’, true), ‘DELETE’, body, function(resp) {
    // success
    console.log(resp);
    if (y == parseInt(str.length / 100)) {
     // 現在表示されているページをリロードする
     location.reload();
     //完了アラートの表示
     window.confirm(‘データ精査が完了しました。’);
    }
   }, function(error) {
    // error
    console.log(error);
   });
  }
 }

 

m_t さん

カウント件数の部分は、あまり見慣れない構造なので、ちょっと見ただけだといいのか悪いのか判断できません。

削除の部分は非同期処理なので、for ループは削除の完了を待たずに進んでいきます。

そのため、最初の削除の完了時に「ページリロード」処理されていると思われます。

rex0220  様

早速のご返答有難うございました。貴重なご意見、参考にさせて頂きます。