Kintone Rest APIの同期処理について

Kintoneのプラグイン設定画面で、作成しているアプリの一覧を取得してから処理をしたいのですが、同期処理の概念を理解できずに困っています。

 

以下のような処理で、ログが1→2→3→4と順番に出てほしいのですが、「

3.got response.」が最後に出力されてしまいます。

jQuery.noConflict();
var apps = [];
(function ($, _pid) {
"use strict";

$(function () {
console.log("1.load event start.")
// 100件ずつアプリ一覧を取得
getApps(0, 100);
console.log("4.load event fin.")
});

/**
* アプリの一覧を取得する
*/
function getApps(offset, limit) {
console.log("2.getApps method start.")
var data = {
"offset": offset,
"limit": limit
}
return kintone.api('/k/v1/apps', 'GET', data).then(function (res) {
console.log("3.got response.")
// 取得結果0件の場合は終了
if (res.apps.length === 0) return;

// アプリ情報を保持する
for (var i in res.apps) {
apps.push(res.apps[i]);
}

// 最大件数分取得した場合は、再帰的に呼び出す
if (res.apps.length === limit) {
getApps(offset + limit, limit);
}
});
}

})(jQuery, kintone.$PLUGIN_ID);

kintoneのPromise(https://developer.cybozu.io/hc/ja/articles/204564604 )についても調べてみましたが、この例はイベントと関連しているので、Promiseのことをよく分かっていない身としては、上記のコードにこの例を移植することができずに困っています。

 

上記のコードで、同期してアプリ情報を取得するサンプルを教えていただけないでしょうか。

T-y さん

kintone イベントと関連するのは、最後に Promiseオブジェクト(event)を返すかどうかだけです。

それ以外は Promise の一般的な使い方と同じです。

Promise をわからないまま使っていると、トラブル時に対応出来なくなりますので、ひととおり解説を読んで試してみてください。

kintone カスタマイズ関連リンク集 Promise 関連

下記は、切り貼りしただけですので検証してください。

 

jQuery.noConflict();
(function($, _pid) {
"use strict";

console.log("1.load event start.")
// 100件ずつアプリ一覧を取得
getApps(0, 100).then(function(resp) {
console.log("4.load event fin.")
});

/**
* アプリの一覧を取得する
*/
function getApps(offset, limit, opt_apps) {
console.log("2.getApps method start.")
var apps = opt_apps || [];
var data = {
"offset": offset,
"limit": limit
}
return kintone.api('/k/v1/apps', 'GET', data).then(function(res) {
console.log("3.got response.")
// 取得結果0件の場合は終了
if (res.apps.length > 0) {
// アプリ情報を保持する
apps = apps.concat(res.apps);
// 最大件数分取得した場合は、再帰的に呼び出す
if (res.apps.length === limit) {
return getApps(offset + limit, limit, apps);
}
};
return apps;
});
}

})(jQuery, kintone.$PLUGIN_ID);