あるアプリAで取得したレコードの情報をキーに、アプリBのレコードを検索し、取得結果を加工したものをアプリCに登録するという処理を行いたいです。
アプリAには複数レコードが登録されています。
(文面上はアプリBとしますが、複数のアプリに検索処理を行いにいきます)
アプリBへの検索処理(以下コードのgetRecords)を再帰的に行い、必要なデータが揃った段階でbulkRequestでアプリCへデータ登録を行う想定です。
アプリBへの検索処理にてpromiseで処理を待機させたいのですが、アプリBの検索処理の途中で、アプリCへの登録処理が走り、1件しかレコードが登録されません。
promiseの記述の問題かとは思いますが、再帰処理にてpromiseを順番通り実行する方法がありましたら、ご教示ください。
【理想】
アプリAへの検索→アプリBへの検索をN回繰り返す→アプリCへの登録
【現状】
アプリAへの検索→アプリBへの検索(途中)→アプリCへの登録→アプリBへの検索
【コード】
// アプリBへの検索処理
function getRecords(dataLists, appRecords, i, targetAppId) {
console.log(‘getRecords’);
return new kintone.Promise(function(resolve, reject){
kintoneRecord.getAllRecordsByQuery(requestParam).then(function(resp) {
// 取得したレコードのデータを加工する
}
}
// 次レコード分、カウントアップする
i++;
if (i < appRecords[0].length) {
// レコード数分、取得処理を繰り返す
getRecords(dataLists, appRecords, i, targetAppId);
}
resolve(dataLists);
});
});
}
// アプリA内のレコードを取得した後に、アプリBの検索処理を実行
return kintone.Promise.all([getAllData, getAppName]).then(function(results) {
count = results[0].length;
targetAppId = results[1];
var i = 0;
// return new kintone.Promise(function(resolve, reject) {
// アプリBへの検索処理
getRecords(dataLists, results, i, targetAppId).then(function(allRecords){
var j = 0;
// アプリCへの登録処理
postRecords(allRecords, j, targetAppId).then(function(postResults){
});
});
});