

# 键值存储的帮助程序方法
<a name="functions-custom-methods"></a>

**注意**  
来自 CloudFront Functions 的键值存储辅助方法调用不会触发 AWS CloudTrail 数据事件。这些事件不会记录在 CloudTrail 事件历史记录中。有关更多信息，请参阅 [使用 AWS CloudTrail 记录 Amazon CloudFront API 调用](logging_using_cloudtrail.md)。

如果您使用 [CloudFront 键值存储](kvs-with-functions.md)在您创建的函数中包含键值，则本节适用。CloudFront Functions 有一个模块，该模块提供了三种用于从键值存储中读取值的帮助程序方法。

要在函数代码中使用此模块，请确保已将[相关键值存储](kvs-with-functions-associate.md)与该函数关联。

接下来，在函数代码的第一行中添加以下语句：

```
import cf from 'cloudfront';
const kvsHandle = cf.kvs();
```



## `get()` 方法
<a name="functions-custom-methods-get"></a>

使用此方法可返回您指定的键名称的键值。

**请求**

```
get("key", options);
```
+ `key`：需要提取其值的键的名称
+ `options`：包含一个选项 `format`。它可以确保函数正确地解析数据。可能的值：
  + `string`：（默认）UTF8 编码
  + `json` 
  + `bytes`：原始二进制数据缓冲区

**请求示例**

```
const value = await kvsHandle.get("myFunctionKey", { format: "string"});
```

**响应**

响应是以使用 `options` 请求的格式解析为值的 `promise`。默认情况下，此值以字符串的形式返回。

### 错误处理
<a name="error-handling-exists-method"></a>

当您请求的键在关联的键值存储中不存在时，`get()` 方法将返回错误。要管理此使用案例，可以在代码中添加 `try` 和 `catch` 块。

**警告**  
使用 Promise 组合器（例如 `Promise.all`、`Promise.any`）和 Promise 链方法（例如 `then` 和 `catch`）可能需要大量的函数内存使用量。如果您的函数超过了[最大函数内存](cloudfront-limits.md#limits-functions)配额，它将无法执行。为避免出现此错误，我们建议您按顺序或循环使用 `await` 语法来请求多个值。  
**示例**  

```
var value1 = await kvs.get('key1');
var value2 = await kvs.get('key2');
```
目前，使用 Promise 组合器获取多个值并不能提高性能，如下例所示。  

```
var values = await Promise.all([kvs.get('key1'), kvs.get('key2'),]);
```

## `exists()` 方法
<a name="functions-custom-methods-exists"></a>

使用该方法可确定此键在键值存储中是否存在。

**请求**

```
exists("key");
```

**请求示例**

```
const exist = await kvsHandle.exists("myFunctionkey");
```

**响应**

响应是返回布尔值（`true` 或 `false`）的 `promise`。该值指定此键在键值存储中是否存在。

## `meta()` 方法
<a name="functions-custom-methods-meta"></a>

使用此方法返回有关键值存储的元数据。

**请求**

```
meta();
```

**请求示例**

```
const meta = await kvsHandle.meta();
```

**响应**

响应是解析为具有以下属性的对象的 `promise`：
+ `creationDateTime`：创建键值存储的日期和时间，采用 ISO 8601 格式。
+ `lastUpdatedDateTime`：上次从源中同步键值存储的日期和时间，采用 ISO 8601 格式。该值不包括向边缘传播的时间。
+ `keyCount`：上次从源同步后 KVS 中的键总数。

**响应示例**

```
{keyCount:3,creationDateTime:2023-11-30T23:07:55.765Z,lastUpdatedDateTime:2023-12-15T03:57:52.411Z}
```