下記のようなコードで
-
Aアプリの一覧画面で500件までの$idと[“商品名”]を取得してmapを使用し配列に格納します。
-
次の1.で取得した[“商品名”]をkeyにして異なるBアプリよりGETして数量を合計したsumをmapを使用してそれぞれ取得します。
ーーーここまでは意図した動作をしています
3.ここでresultAryで2.の結果を取得しAアプリにもどってPUTしようとしたところ、resultAryのPromiseオブジェクトが全てPendingとなってしまい、得られた結果をAアプリにPUTできません。
Promiseではfor文などでループできないことを知りmap()を使用してここまで来たのですが、問題点と解決方法について、アドバイス願えますでしょうか。
※ざっくりした具体的なイメージ
Aアプリ
id :1 , 動物フィールド:0個
id:2 , 魚フィールド:0個
Bアプリ
id1 : 動物フィールド:2個
id2 : 動物フィールド:3個
id:3 , 魚フィールド:5個
id:4 , 魚フィールド:5個
→Bアプリから動物は5個、魚は10個である結果(sum)は取得できている
これに基づき、AアプリをPUTして
id :1 , 動物フィールド:5個
id:2 , 魚フィールド:10個
にしたいのですが、resultAryでpendingとなり、うまく更新がかけられないという状況です。
(function() {
"use strict";
var idAry = []
var nameAry = []
var sumAry = []
var resultAry = []
kintone.events.on('app.record.index.show', function(event){
if(document.getElementById('updateButton') !== null) return;
var button = document.createElement('button');
button.innerHTML = '一括更新';
button.id = 'updateButton';
kintone.app.getHeaderMenuSpaceElement().appendChild(button);
button.addEventListener('click', function(){
return kintone.api(kintone.api.url('/k/v1/records', true), 'GET', {
app: 449,
query: 'limit ' + 500 +' offset ' + 0
})
.then(function(response){
idAry = response.records.map(function(item){
return item.$id.value
})
nameAry = response.records.map(function(item){
return item['商品名'].value
})
})
.then(function(){
resultAry = nameAry.map(function(item){
var query = 'p1="' + item + '"';
var body = {
'app' : 390,
'query' : query
};
return kintone.api(kintone.api.url('/k/v1/records', true), 'GET', body)
.then(function(resp){
var sum = 0;
resp.records.forEach((record)=>{
sum += record['関連レコード一覧数量'].value ? parseInt(record['関連レコード一覧数量'].value) : 0;
});
return sum
//console.log(sum)
})
})
}).then(function(){
console.log(resultAry)//ここでPromiseOBJがPendingとなるため、下の処理に移れない
idAry.map(function(){
//ここでAアプリのidの順番にsumで得られた数値をPUTで更新していきたい
})
});
return event;
});
})();