Ribbit.work

kintone.events.onと非同期処理(async/await) - kintone

Kintonejavascript

last modified date2021-7-10

publish date2021-7-6

こんにちはリビットです。

今回はJavaScriptカスタマイズを行う上でよく利用する非同期処理を実装する方法と、実装する上での注意点を紹介します。

実装方法

// 重たい処理
const heavyProcess = new Promise((resolve) =>
  setTimeout(() => resolve("1秒かかる処理が完了しました"), 1000)
);

// 無名関数で実装
kintone.events.on(['app.record.index.show'], async (event) => {
  const result = await heavyProcess;
  console.log(result);
  return event;
})

// 関数を用意したうえで実装
async function handler(event) {
  const result = await heavyProcess;
  console.log(result);
  return event;
}

kintone.events.on(['app.record.create.show'], handler);

注意点

kintone.events.onに登録した関数は引数として受け取ったeventを最終的にreturnします。

kintone.events.on(["app.record.print.show"], (event) => {
  // 借りたらちゃんと返す
  return event;
});

この関数を非同期にするということは、返却される値がeventからPromise<event>になるということです。

kintone.events.on(["app.record.print.show"], async (event) => {
  // 返却されるのはeventそのものではなく、Promiseにラップされたオブジェクト
  return event;
});

Kintoneはこれを想定していて、Developer Networkのほとんどのイベントで以下のように記述があります。

kintone.Promiseオブジェクトをreturnすると、非同期処理の完了を待って次の処理を開始します。

ただいくつか例外があり、app.record.create.show、app.record.edit.show、app.record.detail.showの3つは動作が保証されず、app.record.edit.change, app.record.create.changeではエラーが出ます。

上記の例外全てについて、確認する限り全く動かないということはありませんでしたが、正常に動作しない可能性があるので注意してください。

この記事を読んだ方におすすめの記事

ダブルクォートの有無や文字コードを問わず使用できるCSV取込

javascript
2021-7-19

Kintoneのフィールドコードの命名規則と、JavaScript上で使用する際に気を付けること

Kintonejavascript
2021-7-9

1つのJavaScriptファイルに複数のkintone.events.onを登録する

Kintonejavascript
2021-7-5

同一アプリ(自アプリ)をルックアップできるようにするプラグインを作成しました。

KintoneTypeScriptjavascript
2021-7-4

kintone.events.onを書かないkintoneカスタマイズ

Kintonejavascript
2021-6-27