# context.states

状态来源先在 [stateSources](./states.md) 中声明。发布后，流程表达式和超级块可以读取这个值。完整示例见[发布状态](../guides/states.md)。

## publish()

更新本插件的一个状态来源。

```ts
context.states.publish(sourceId: string, value: unknown,
  target?: { deviceId: string; screenId?: string; blockId?: string }): Promise<{ published: boolean }>
```

### 参数

| 名称 | 类型 | 说明 |
| --- | --- | --- |
| `sourceId` | `string` | 清单中的状态来源 ID。 |
| `value` | `unknown` | 符合来源 Schema 的 JSON 值。`false`、`0` 和空字符串都是可用值；暂时没有值时，等数据就绪后再发布。 |
| `target` | `object` | 全局来源省略。设备来源传 `deviceId`；屏幕来源再传 `screenId`；实例来源再传 `blockId`。 |

### 返回值

Promise 解析为 `{ published: boolean }`。飞块按来源的类型、作用域和大小检查数据，失败时 Promise 拒绝。

### 示例

```js
await context.states.publish("playback", "playing");

await context.states.publish("count", 3, {
  deviceId: request.deviceId,
  screenId: request.screenId,
  blockId: request.blockId
});
```
