# 动作调用

一个动作由清单中的 `actions[]` 和后台中的 `actions[actionId]` 共同定义。编辑器根据清单显示输入，宿主根据相同的 Schema 检查调用参数。

## 输入参数

调用参数是 JSON 对象。宿主检查必填字段、数据类型和字段约束后，才调用后台处理函数。未知字段默认不被接受；需要开放对象字段时，在对应 Schema 中设置 `additionalProperties`。

`default` 用于描述默认输入。处理函数仍可以给可选参数设置 JavaScript 默认值，让自己的实现清楚表达省略参数时的行为，见[开发动作](../../guides/actions.md)。

## 执行

处理函数可以同步返回，也可以返回 Promise。飞块按照 `execution` 的超时、资源和重复触发设置调度调用。例如，两个操作都修改剪贴板时，声明相同资源可以让宿主统一协调所有入口的执行。

执行属性集中定义在 [ActionExecution](../../reference/actions.md#actionexecution)，这里沿用同一套声明。

## 结果

普通 JSON 返回值成为步骤结果。声明 `outputSchema` 后，宿主检查结果是否符合它的 Schema；校验失败时，这一步以错误结束。

设备导航是专门的操作结果：处理函数返回 `context.deck.navigate()` 生成的对象，宿主据此切换触发设备的屏幕。具体格式见 [context.deck](../../reference/deck.md)。

## 错误

处理函数抛出异常或返回拒绝的 Promise 时，飞块显示错误消息。错误文字应描述发生了什么，例如“找不到所选文件”，让用户知道要检查哪个输入。
