# 生命週期

## MAESTROSDK.beforeRefresh(handler)

註冊一個函式，在 Cowork 重新整理這個 Mini App 的分頁之前執行，例如使用者按下重新整理按鈕時。用它保住尚未儲存的工作：詢問、儲存，或取消這次重新整理。

### 參數

| 名稱 | 類型 | 必填 | 說明 |
|---|---|---|---|
| `handler` | `() => boolean \| void \| Promise<boolean \| void>` | 是 | 每次重新整理執行一次。回傳 `false`（或解析為 `false` 的 promise）會取消重新整理，回傳其他值則讓它繼續 |

### 回傳值

`() => void`：呼叫它即可移除這個處理函式。

### 行為

- 處理函式依加入的順序逐一執行，每一個都會被等待完成。
- 第一個回傳 `false` 的處理函式會取消重新整理。處理函式拋出錯誤或被拒絕，也會取消重新整理。
- 沒有處理函式時，分頁會立即重新整理。
- 同一時間只處理一次重新整理；處理中又收到的第二個請求會被忽略。
- 不是函式的 `handler` 會被忽略，回傳的函式也不會做任何事。

### 示例

```js
const off = MAESTROSDK.beforeRefresh(async () => {
  if (!form.dirty) return;
  return await MAESTROSDK.confirm({ title: 'Refresh?', message: 'Unsaved changes will be lost.' });
});
// later
off();
```

## 相關

- [互動](https://docs.micromeet.ai/zh-tw/miniapp-sdk/interaction.md): `confirm`，常在 `beforeRefresh` 裡使用
- [概覽](https://docs.micromeet.ai/zh-tw/miniapp-sdk/overview.md): Mini App SDK 的所有模組
