# 小程序端初始化

调用云函数、数据库、存储、云托管等 API 时，都需要指定所需访问的云环境 ID，意即指定访问哪个环境下的云函数/数据库/存储/云托管/...资源。有两种方式进行指定：
1. 使用默认实例 `wx.cloud`：在使用默认实例调用 API 时，各个 API 都支持传入 env 用于指定所需访问的云环境 ID，如果 API 中不传，则使用 `wx.cloud.init` 时传入的 env。
1. 为各个环境使用单独的实例：使用 `new wx.cloud.Cloud` API 为新建一个专用于访问某个环境的实例，在该实例上进行的 API 调用都只会访问该环境。

| 实例 | API |
|  --   |  --   |
| wx.cloud
默认实例 | wx.cloud.callFunction
wx.cloud.callContainerwx.cloud.database
...
访问 API 参数中指定的环境或 wx.cloud.init 指定的默认环境 |
| a = new wx.cloud.Cloud({
  resourceEnv: 'a'
})
仅用于访问环境 a 的实例 | a.callFunction
a.callContainera
...
访问 a 环境的云资源 |
| b = new wx.cloud.Cloud({
  resourceEnv: 'b'
})
仅用于访问环境 b 的实例 | b.callFunction
b.callContainera
...
访问 b 环境的云资源 |

### 一、默认实例 wx.cloud

在调用云开发各 API 前，需先调用初始化方法 `init` 一次（全局只需一次，多次调用时只有第一次生效）

`wx.cloud.init` 方法的定义如下：

```js
function init(options): void
```

`wx.cloud.init` 方法接受一个 `options 参数`，方法没有返回值。

| 字段| 数据类型 | 必填 | 默认值  | 说明  |
| --  | -- | -- | -- | --
| env | string | 是 |  | 必填，环境 ID，指定接下来调用 API 时访问哪个环境的云资源 |
| traceUser | boolean  |  否  | true  | 是否在将用户访问记录到用户管理中，在控制台中可见 |

示例代码：

```js
wx.cloud.init({
  env: '环境ID',
  traceUser: true,
})
```

### 二、新建实例 new wx.cloud.Cloud

使用 `new wx.cloud.Cloud` 新建 Cloud 实例时需要指定云环境 ID，方法定义如下

```js
function cloud.Cloud(options): Cloud
```

`options` 参数定义：

| 字段| 数据类型 | 必填 | 默认值  | 说明  |
| --  | -- | -- | -- | --
| resourceEnv | string | 是 |  | 必填，环境 ID，指定接下来调用 API 时访问哪个环境的云资源 |
| traceUser | boolean  |  否  | true  | 是否在将用户访问记录到用户管理中，在控制台中可见 |

在新建完成实例后，必须先调用初始化方法 `init` 一次（只需一次，多次调用时只有第一次生效）。

示例代码：

```js
const a = new wx.cloud.Cloud({
  resourceEnv: 'a',
  traceUser: true,
})
await a.init()

// 可以调用云开发 API 访问云资源了，如
const res = await a.callFunction({
  name: 'test',
  data: {
    // ...
  },
})
```

如果是[跨账号环境共享](/minigame/dev/wxcloud/guide/resource-sharing/index)的场景（使用其他微信云开发的资源），必须使用 `new wx.cloud.Cloud` 新建实例使用，具体参见文档。
