1e41f4b71Sopenharmony_ci# @arkts.utils (ArkTS工具库) 2e41f4b71Sopenharmony_ci 3e41f4b71Sopenharmony_ci本模块提供了各种ArkTS实用工具函数。 4e41f4b71Sopenharmony_ci 5e41f4b71Sopenharmony_ci> **说明:** 6e41f4b71Sopenharmony_ci> 7e41f4b71Sopenharmony_ci> 本模块首批接口从API version 12开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 8e41f4b71Sopenharmony_ci 9e41f4b71Sopenharmony_ci## 导入模块 10e41f4b71Sopenharmony_ci 11e41f4b71Sopenharmony_ci```ts 12e41f4b71Sopenharmony_ciimport { ArkTSUtils } from '@kit.ArkTS' 13e41f4b71Sopenharmony_ci``` 14e41f4b71Sopenharmony_ci 15e41f4b71Sopenharmony_ci## ArkTSUtils.locks 16e41f4b71Sopenharmony_ci 17e41f4b71Sopenharmony_ci为了解决多并发实例间的数据竞争问题,ArkTS语言基础库引入了异步锁能力。为了开发者的开发效率,AsyncLock对象支持跨并发实例引用传递。 18e41f4b71Sopenharmony_ci 19e41f4b71Sopenharmony_ci由于ArkTS语言支持异步操作,阻塞锁容易产生死锁问题,因此我们在ArkTS中仅支持异步锁(非阻塞式锁)。 20e41f4b71Sopenharmony_ci 21e41f4b71Sopenharmony_ci使用异步锁的方法需要标记为async,调用方需要await修饰调用,才能保证时序正确。因此会导致外层调用函数全部标记成async。 22e41f4b71Sopenharmony_ci 23e41f4b71Sopenharmony_ci### AsyncLockCallback 24e41f4b71Sopenharmony_ci 25e41f4b71Sopenharmony_citype AsyncLockCallback\<T> = () => T | Promise\<T> 26e41f4b71Sopenharmony_ci 27e41f4b71Sopenharmony_ci这是一个补充类型别名,表示[lockAsync](#lockasync)函数所有重载中的回调。 28e41f4b71Sopenharmony_ci 29e41f4b71Sopenharmony_ci**原子化服务API**:从API version 12 开始,该接口支持在原子化服务中使用。 30e41f4b71Sopenharmony_ci 31e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 32e41f4b71Sopenharmony_ci 33e41f4b71Sopenharmony_ci### AsyncLock 34e41f4b71Sopenharmony_ci 35e41f4b71Sopenharmony_ci实现异步锁功能的类,允许在锁下执行异步操作。 36e41f4b71Sopenharmony_ci 37e41f4b71Sopenharmony_ci#### 属性 38e41f4b71Sopenharmony_ci 39e41f4b71Sopenharmony_ci**原子化服务API**:从API version 12 开始,该接口支持在原子化服务中使用。 40e41f4b71Sopenharmony_ci 41e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 42e41f4b71Sopenharmony_ci 43e41f4b71Sopenharmony_ci| 名称 | 类型 | 可读 | 可写 | 说明 | 44e41f4b71Sopenharmony_ci| ---- | ------ | ---- | ---- | ---------- | 45e41f4b71Sopenharmony_ci| name | string | 是 | 否 | 锁的名称。 | 46e41f4b71Sopenharmony_ci 47e41f4b71Sopenharmony_ci**示例:** 48e41f4b71Sopenharmony_ci 49e41f4b71Sopenharmony_ci```ts 50e41f4b71Sopenharmony_ci// 示例一: 51e41f4b71Sopenharmony_ci@Sendable 52e41f4b71Sopenharmony_ciclass A { 53e41f4b71Sopenharmony_ci count_: number = 0; 54e41f4b71Sopenharmony_ci async getCount(): Promise<number> { 55e41f4b71Sopenharmony_ci let lock: ArkTSUtils.locks.AsyncLock = ArkTSUtils.locks.AsyncLock.request("lock_1"); 56e41f4b71Sopenharmony_ci return lock.lockAsync(() => { 57e41f4b71Sopenharmony_ci return this.count_; 58e41f4b71Sopenharmony_ci }) 59e41f4b71Sopenharmony_ci } 60e41f4b71Sopenharmony_ci async setCount(count: number) { 61e41f4b71Sopenharmony_ci let lock: ArkTSUtils.locks.AsyncLock = ArkTSUtils.locks.AsyncLock.request("lock_1"); 62e41f4b71Sopenharmony_ci await lock.lockAsync(() => { 63e41f4b71Sopenharmony_ci this.count_ = count; 64e41f4b71Sopenharmony_ci }) 65e41f4b71Sopenharmony_ci } 66e41f4b71Sopenharmony_ci} 67e41f4b71Sopenharmony_ci 68e41f4b71Sopenharmony_ci// 示例二: 69e41f4b71Sopenharmony_ci@Sendable 70e41f4b71Sopenharmony_ciclass A { 71e41f4b71Sopenharmony_ci count_: number = 0; 72e41f4b71Sopenharmony_ci lock_: ArkTSUtils.locks.AsyncLock = new ArkTSUtils.locks.AsyncLock(); 73e41f4b71Sopenharmony_ci async getCount(): Promise<number> { 74e41f4b71Sopenharmony_ci return this.lock_.lockAsync(() => { 75e41f4b71Sopenharmony_ci return this.count_; 76e41f4b71Sopenharmony_ci }) 77e41f4b71Sopenharmony_ci } 78e41f4b71Sopenharmony_ci async setCount(count: number) { 79e41f4b71Sopenharmony_ci await this.lock_.lockAsync(() => { 80e41f4b71Sopenharmony_ci this.count_ = count; 81e41f4b71Sopenharmony_ci }) 82e41f4b71Sopenharmony_ci } 83e41f4b71Sopenharmony_ci} 84e41f4b71Sopenharmony_ci 85e41f4b71Sopenharmony_ci@Concurrent 86e41f4b71Sopenharmony_ciasync function foo(a: A) { 87e41f4b71Sopenharmony_ci await a.setCount(10) 88e41f4b71Sopenharmony_ci} 89e41f4b71Sopenharmony_ci``` 90e41f4b71Sopenharmony_ci 91e41f4b71Sopenharmony_ci#### constructor 92e41f4b71Sopenharmony_ci 93e41f4b71Sopenharmony_ciconstructor() 94e41f4b71Sopenharmony_ci 95e41f4b71Sopenharmony_ci默认构造函数。创建一个异步锁。 96e41f4b71Sopenharmony_ci 97e41f4b71Sopenharmony_ci**原子化服务API**:从API version 12 开始,该接口支持在原子化服务中使用。 98e41f4b71Sopenharmony_ci 99e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 100e41f4b71Sopenharmony_ci 101e41f4b71Sopenharmony_ci**返回值:** 102e41f4b71Sopenharmony_ci 103e41f4b71Sopenharmony_ci| 类型 | 说明 | 104e41f4b71Sopenharmony_ci| ----------------------- | ------------------ | 105e41f4b71Sopenharmony_ci| [AsyncLock](#asynclock) | 创建的异步锁实例。 | 106e41f4b71Sopenharmony_ci 107e41f4b71Sopenharmony_ci**示例:** 108e41f4b71Sopenharmony_ci 109e41f4b71Sopenharmony_ci```ts 110e41f4b71Sopenharmony_cilet lock = new ArkTSUtils.locks.AsyncLock(); 111e41f4b71Sopenharmony_ci``` 112e41f4b71Sopenharmony_ci 113e41f4b71Sopenharmony_ci#### request 114e41f4b71Sopenharmony_ci 115e41f4b71Sopenharmony_cistatic request(name: string): AsyncLock 116e41f4b71Sopenharmony_ci 117e41f4b71Sopenharmony_ci使用指定的名称查找或创建(如果未找到)异步锁实例。 118e41f4b71Sopenharmony_ci 119e41f4b71Sopenharmony_ci**原子化服务API**:从API version 12 开始,该接口支持在原子化服务中使用。 120e41f4b71Sopenharmony_ci 121e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 122e41f4b71Sopenharmony_ci 123e41f4b71Sopenharmony_ci**参数:** 124e41f4b71Sopenharmony_ci 125e41f4b71Sopenharmony_ci| 名称 | 类型 | 必填 | 说明 | 126e41f4b71Sopenharmony_ci| ---- | ------ | ---- | -------------------------------- | 127e41f4b71Sopenharmony_ci| name | string | 是 | 按指定名称查找或创建异步锁实例。 | 128e41f4b71Sopenharmony_ci 129e41f4b71Sopenharmony_ci**返回值:** 130e41f4b71Sopenharmony_ci 131e41f4b71Sopenharmony_ci| 类型 | 说明 | 132e41f4b71Sopenharmony_ci| ----------------------- | -------------------------------- | 133e41f4b71Sopenharmony_ci| [AsyncLock](#asynclock) | 返回查找到或创建后的异步锁实例。 | 134e41f4b71Sopenharmony_ci 135e41f4b71Sopenharmony_ci**示例:** 136e41f4b71Sopenharmony_ci 137e41f4b71Sopenharmony_ci```ts 138e41f4b71Sopenharmony_cilet lockName = 'isAvailableLock'; 139e41f4b71Sopenharmony_cilet lock = ArkTSUtils.locks.AsyncLock.request(lockName); 140e41f4b71Sopenharmony_ci``` 141e41f4b71Sopenharmony_ci 142e41f4b71Sopenharmony_ci#### query 143e41f4b71Sopenharmony_ci 144e41f4b71Sopenharmony_cistatic query(name: string): AsyncLockState 145e41f4b71Sopenharmony_ci 146e41f4b71Sopenharmony_ci查询指定异步锁的信息。 147e41f4b71Sopenharmony_ci 148e41f4b71Sopenharmony_ci**原子化服务API**:从API version 12 开始,该接口支持在原子化服务中使用。 149e41f4b71Sopenharmony_ci 150e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 151e41f4b71Sopenharmony_ci 152e41f4b71Sopenharmony_ci**参数:** 153e41f4b71Sopenharmony_ci 154e41f4b71Sopenharmony_ci| 名称 | 类型 | 必填 | 说明 | 155e41f4b71Sopenharmony_ci| ---- | ------ | ---- | ---------- | 156e41f4b71Sopenharmony_ci| name | string | 是 | 锁的名称。 | 157e41f4b71Sopenharmony_ci 158e41f4b71Sopenharmony_ci**返回值:** 159e41f4b71Sopenharmony_ci 160e41f4b71Sopenharmony_ci| 类型 | 说明 | 161e41f4b71Sopenharmony_ci| --------------------------------- | ---------------------------------- | 162e41f4b71Sopenharmony_ci| [AsyncLockState](#asynclockstate) | 一个包含状态描述的异步锁状态实例。 | 163e41f4b71Sopenharmony_ci 164e41f4b71Sopenharmony_ci**错误码:** 165e41f4b71Sopenharmony_ci 166e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。 167e41f4b71Sopenharmony_ci 168e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 169e41f4b71Sopenharmony_ci| -------- | ------------- | 170e41f4b71Sopenharmony_ci| 10200030 | The lock does not exist. | 171e41f4b71Sopenharmony_ci 172e41f4b71Sopenharmony_ci**示例:** 173e41f4b71Sopenharmony_ci 174e41f4b71Sopenharmony_ci```ts 175e41f4b71Sopenharmony_ci// 你已经在别的地方创建了一个锁。 176e41f4b71Sopenharmony_ci// let lock = ArkTSUtils.locks.AsyncLock.request("queryTestLock"); 177e41f4b71Sopenharmony_cilet state = ArkTSUtils.locks.AsyncLock.query('queryTestLock'); 178e41f4b71Sopenharmony_ciif (!state) { 179e41f4b71Sopenharmony_ci throw new Error('测试失败:期望有效的状态,但得到的是 ' + state); 180e41f4b71Sopenharmony_ci} 181e41f4b71Sopenharmony_cilet pending: ArkTSUtils.locks.AsyncLockInfo[] = state.pending; 182e41f4b71Sopenharmony_cilet held: ArkTSUtils.locks.AsyncLockInfo[] = state.held; 183e41f4b71Sopenharmony_ci``` 184e41f4b71Sopenharmony_ci 185e41f4b71Sopenharmony_ci#### queryAll 186e41f4b71Sopenharmony_ci 187e41f4b71Sopenharmony_cistatic queryAll(): AsyncLockState[] 188e41f4b71Sopenharmony_ci 189e41f4b71Sopenharmony_ci查询所有现有锁的信息。 190e41f4b71Sopenharmony_ci 191e41f4b71Sopenharmony_ci**原子化服务API**:从API version 12 开始,该接口支持在原子化服务中使用。 192e41f4b71Sopenharmony_ci 193e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 194e41f4b71Sopenharmony_ci 195e41f4b71Sopenharmony_ci**返回值:** 196e41f4b71Sopenharmony_ci 197e41f4b71Sopenharmony_ci| 类型 | 说明 | 198e41f4b71Sopenharmony_ci| ----------------------------------- | -------------------------------- | 199e41f4b71Sopenharmony_ci| [AsyncLockState](#asynclockstate)[] | 包含锁状态信息的异步锁状态数组。 | 200e41f4b71Sopenharmony_ci 201e41f4b71Sopenharmony_ci**示例:** 202e41f4b71Sopenharmony_ci 203e41f4b71Sopenharmony_ci```ts 204e41f4b71Sopenharmony_cilet states: ArkTSUtils.locks.AsyncLockState[] = ArkTSUtils.locks.AsyncLock.queryAll(); 205e41f4b71Sopenharmony_ciif (states.length == 0) { 206e41f4b71Sopenharmony_ci throw new Error('测试失败:期望至少有1个状态,但得到的是 ' + states.length); 207e41f4b71Sopenharmony_ci} 208e41f4b71Sopenharmony_ci``` 209e41f4b71Sopenharmony_ci 210e41f4b71Sopenharmony_ci#### lockAsync 211e41f4b71Sopenharmony_ci 212e41f4b71Sopenharmony_cilockAsync\<T>(callback: AsyncLockCallback\<T>): Promise\<T> 213e41f4b71Sopenharmony_ci 214e41f4b71Sopenharmony_ci在获取的锁下独占执行操作。该方法首先获取锁,然后调用回调,最后释放锁。回调在调用[lockAsync](#lockasync)的同一线程中以异步方式执行。 215e41f4b71Sopenharmony_ci 216e41f4b71Sopenharmony_ci**原子化服务API**:从API version 12 开始,该接口支持在原子化服务中使用。 217e41f4b71Sopenharmony_ci 218e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 219e41f4b71Sopenharmony_ci 220e41f4b71Sopenharmony_ci**参数:** 221e41f4b71Sopenharmony_ci 222e41f4b71Sopenharmony_ci| 名称 | 类型 | 必填 | 说明 | 223e41f4b71Sopenharmony_ci| -------- | --------------------------------------- | ---- | ---------------------- | 224e41f4b71Sopenharmony_ci| callback | [AsyncLockCallback](#asynclockcallback) | 是 | 获取锁后要调用的函数。 | 225e41f4b71Sopenharmony_ci 226e41f4b71Sopenharmony_ci**返回值:** 227e41f4b71Sopenharmony_ci 228e41f4b71Sopenharmony_ci| 类型 | 说明 | 229e41f4b71Sopenharmony_ci| ----------- | --------------------------- | 230e41f4b71Sopenharmony_ci| Promise\<T> | 回调执行后将解决的Promise。 | 231e41f4b71Sopenharmony_ci 232e41f4b71Sopenharmony_ci**错误码:** 233e41f4b71Sopenharmony_ci 234e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。 235e41f4b71Sopenharmony_ci 236e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 237e41f4b71Sopenharmony_ci| -------- | ------------- | 238e41f4b71Sopenharmony_ci| 10200030 | The lock does not exist. | 239e41f4b71Sopenharmony_ci 240e41f4b71Sopenharmony_ci**示例:** 241e41f4b71Sopenharmony_ci 242e41f4b71Sopenharmony_ci```ts 243e41f4b71Sopenharmony_cilet lock = new ArkTSUtils.locks.AsyncLock(); 244e41f4b71Sopenharmony_cilet p1 = lock.lockAsync<void>(() => { 245e41f4b71Sopenharmony_ci // 执行某些操作 246e41f4b71Sopenharmony_ci}); 247e41f4b71Sopenharmony_ci``` 248e41f4b71Sopenharmony_ci 249e41f4b71Sopenharmony_ci#### lockAsync 250e41f4b71Sopenharmony_ci 251e41f4b71Sopenharmony_cilockAsync\<T>(callback: AsyncLockCallback\<T>, mode: AsyncLockMode): Promise\<T> 252e41f4b71Sopenharmony_ci 253e41f4b71Sopenharmony_ci在获取的锁下执行操作。该方法首先获取锁,然后调用回调,最后释放锁。回调在调用[lockAsync](#lockasync)的同一线程中以异步方式执行。 254e41f4b71Sopenharmony_ci 255e41f4b71Sopenharmony_ci**原子化服务API**:从API version 12 开始,该接口支持在原子化服务中使用。 256e41f4b71Sopenharmony_ci 257e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 258e41f4b71Sopenharmony_ci 259e41f4b71Sopenharmony_ci**参数:** 260e41f4b71Sopenharmony_ci 261e41f4b71Sopenharmony_ci| 名称 | 类型 | 必填 | 说明 | 262e41f4b71Sopenharmony_ci| -------- | --------------------------------------- | ---- | ---------------------- | 263e41f4b71Sopenharmony_ci| callback | [AsyncLockCallback](#asynclockcallback) | 是 | 获取锁后要调用的函数。 | 264e41f4b71Sopenharmony_ci| mode | [AsyncLockMode](#asynclockmode) | 是 | 锁的操作模式。 | 265e41f4b71Sopenharmony_ci 266e41f4b71Sopenharmony_ci**返回值:** 267e41f4b71Sopenharmony_ci 268e41f4b71Sopenharmony_ci| 类型 | 说明 | 269e41f4b71Sopenharmony_ci| ----------- | --------------------------- | 270e41f4b71Sopenharmony_ci| Promise\<T> | 回调执行后将解决的Promise。 | 271e41f4b71Sopenharmony_ci 272e41f4b71Sopenharmony_ci**错误码:** 273e41f4b71Sopenharmony_ci 274e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。 275e41f4b71Sopenharmony_ci 276e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 277e41f4b71Sopenharmony_ci| -------- | ------------- | 278e41f4b71Sopenharmony_ci| 10200030 | The lock does not exist. | 279e41f4b71Sopenharmony_ci 280e41f4b71Sopenharmony_ci**示例:** 281e41f4b71Sopenharmony_ci 282e41f4b71Sopenharmony_ci```ts 283e41f4b71Sopenharmony_cilet lock = new ArkTSUtils.locks.AsyncLock(); 284e41f4b71Sopenharmony_cilet p1 = lock.lockAsync<void>(() => { 285e41f4b71Sopenharmony_ci // 执行某些操作 286e41f4b71Sopenharmony_ci}, ArkTSUtils.locks.AsyncLockMode.EXCLUSIVE); 287e41f4b71Sopenharmony_ci``` 288e41f4b71Sopenharmony_ci 289e41f4b71Sopenharmony_ci#### lockAsync 290e41f4b71Sopenharmony_ci 291e41f4b71Sopenharmony_cilockAsync\<T, U>(callback: AsyncLockCallback\<T>, mode: AsyncLockMode, options: AsyncLockOptions\<U>): Promise\<T | U> 292e41f4b71Sopenharmony_ci 293e41f4b71Sopenharmony_ci在获取的锁下执行操作。该方法首先获取锁,然后调用回调,最后释放锁。回调在调用[lockAsync](#lockasync)的同一线程中以异步方式执行。在[AsyncLockOptions](#asynclockoptions)中可以提供一个可选的超时值。在这种情况下,如果超时前未能获取锁,lockAsync将拒绝返回的Promise并带上一个BusinessError实例。这种情况下,错误信息将包含持有的锁和等待的锁的信息以及可能的死锁警告。 294e41f4b71Sopenharmony_ci 295e41f4b71Sopenharmony_ci**原子化服务API**:从API version 12 开始,该接口支持在原子化服务中使用。 296e41f4b71Sopenharmony_ci 297e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 298e41f4b71Sopenharmony_ci 299e41f4b71Sopenharmony_ci**参数:** 300e41f4b71Sopenharmony_ci 301e41f4b71Sopenharmony_ci| 名称 | 类型 | 必填 | 说明 | 302e41f4b71Sopenharmony_ci| -------- | ----------------------------------------- | ---- | ---------------------- | 303e41f4b71Sopenharmony_ci| callback | [AsyncLockCallback](#asynclockcallback) | 是 | 获取锁后要调用的函数。 | 304e41f4b71Sopenharmony_ci| mode | [AsyncLockMode](#asynclockmode) | 是 | 锁的操作模式。 | 305e41f4b71Sopenharmony_ci| options | [AsyncLockOptions\<U>](#asynclockoptions) | 是 | 锁的操作选项。 | 306e41f4b71Sopenharmony_ci 307e41f4b71Sopenharmony_ci**返回值:** 308e41f4b71Sopenharmony_ci 309e41f4b71Sopenharmony_ci| 类型 | 说明 | 310e41f4b71Sopenharmony_ci| ---------------- | -------------------------------------------------- | 311e41f4b71Sopenharmony_ci| Promise\<T \| U> | 回调执行后解决的 Promise,或者在超时情况下被拒绝。 | 312e41f4b71Sopenharmony_ci 313e41f4b71Sopenharmony_ci**错误码:** 314e41f4b71Sopenharmony_ci 315e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。 316e41f4b71Sopenharmony_ci 317e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 318e41f4b71Sopenharmony_ci| -------- | ----------------- | 319e41f4b71Sopenharmony_ci| 10200030 | The lock does not exist. | 320e41f4b71Sopenharmony_ci| 10200031 | Timeout exceeded. | 321e41f4b71Sopenharmony_ci 322e41f4b71Sopenharmony_ci**示例:** 323e41f4b71Sopenharmony_ci 324e41f4b71Sopenharmony_ci```ts 325e41f4b71Sopenharmony_cilet lock = new ArkTSUtils.locks.AsyncLock(); 326e41f4b71Sopenharmony_cilet options = new ArkTSUtils.locks.AsyncLockOptions<void>(); 327e41f4b71Sopenharmony_cioptions.timeout = 1000; 328e41f4b71Sopenharmony_cilet p: Promise<void> = lock.lockAsync<void, void>( 329e41f4b71Sopenharmony_ci () => { 330e41f4b71Sopenharmony_ci // 执行某些操作 331e41f4b71Sopenharmony_ci }, 332e41f4b71Sopenharmony_ci ArkTSUtils.locks.AsyncLockMode.EXCLUSIVE, 333e41f4b71Sopenharmony_ci options 334e41f4b71Sopenharmony_ci); 335e41f4b71Sopenharmony_ci``` 336e41f4b71Sopenharmony_ci 337e41f4b71Sopenharmony_ci### AsyncLockMode 338e41f4b71Sopenharmony_ci 339e41f4b71Sopenharmony_ci锁操作对应的模式枚举。 340e41f4b71Sopenharmony_ci 341e41f4b71Sopenharmony_ci**原子化服务API**:从API version 12 开始,该接口支持在原子化服务中使用。 342e41f4b71Sopenharmony_ci 343e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 344e41f4b71Sopenharmony_ci 345e41f4b71Sopenharmony_ci| 名称 | 值 | 说明 | 346e41f4b71Sopenharmony_ci| --------- | --- | -------------------------------------------------------- | 347e41f4b71Sopenharmony_ci| SHARED | 1 | 共享锁模式。如果指定了此模式,可以在任意线程同时执行。 | 348e41f4b71Sopenharmony_ci| EXCLUSIVE | 2 | 独占锁模式。如果指定了此模式,仅在独占获取锁时才能执行。 | 349e41f4b71Sopenharmony_ci 350e41f4b71Sopenharmony_ci**示例:** 351e41f4b71Sopenharmony_ci 352e41f4b71Sopenharmony_ci```ts 353e41f4b71Sopenharmony_cilet lock = new ArkTSUtils.locks.AsyncLock(); 354e41f4b71Sopenharmony_ci// shared0可获取锁并开始执行 355e41f4b71Sopenharmony_cilock.lockAsync(async () => { 356e41f4b71Sopenharmony_ci console.log('shared0'); 357e41f4b71Sopenharmony_ci await new Promise<void>((resolve) => setTimeout(resolve, 1000)); 358e41f4b71Sopenharmony_ci}, ArkTSUtils.locks.AsyncLockMode.SHARED); 359e41f4b71Sopenharmony_ci// shared1可获取锁并开始执行,无需等待shared0 360e41f4b71Sopenharmony_cilock.lockAsync(async () => { 361e41f4b71Sopenharmony_ci console.log('shared1'); 362e41f4b71Sopenharmony_ci await new Promise<void>((resolve) => setTimeout(resolve, 1000)); 363e41f4b71Sopenharmony_ci}, ArkTSUtils.locks.AsyncLockMode.SHARED); 364e41f4b71Sopenharmony_ci// exclusive0需等待shared0、1执行完后才可获取锁并执行 365e41f4b71Sopenharmony_cilock.lockAsync(async () => { 366e41f4b71Sopenharmony_ci console.log('exclusive0'); 367e41f4b71Sopenharmony_ci await new Promise<void>((resolve) => setTimeout(resolve, 1000)); 368e41f4b71Sopenharmony_ci}, ArkTSUtils.locks.AsyncLockMode.EXCLUSIVE); 369e41f4b71Sopenharmony_ci// shared2需等待exclusive0执行完后才可获取锁并执行 370e41f4b71Sopenharmony_cilock.lockAsync(async () => { 371e41f4b71Sopenharmony_ci console.log('shared2'); 372e41f4b71Sopenharmony_ci await new Promise<void>((resolve) => setTimeout(resolve, 1000)); 373e41f4b71Sopenharmony_ci}, ArkTSUtils.locks.AsyncLockMode.SHARED); 374e41f4b71Sopenharmony_ci// shared3需等待exclusive0执行完后才可获取锁并执行,无需等待shared2 375e41f4b71Sopenharmony_cilock.lockAsync(async () => { 376e41f4b71Sopenharmony_ci console.log('shared3'); 377e41f4b71Sopenharmony_ci await new Promise<void>((resolve) => setTimeout(resolve, 1000)); 378e41f4b71Sopenharmony_ci}, ArkTSUtils.locks.AsyncLockMode.SHARED); 379e41f4b71Sopenharmony_ci``` 380e41f4b71Sopenharmony_ci 381e41f4b71Sopenharmony_ci### AsyncLockOptions 382e41f4b71Sopenharmony_ci 383e41f4b71Sopenharmony_ciclass AsyncLockOptions\<T> 384e41f4b71Sopenharmony_ci 385e41f4b71Sopenharmony_ci表示锁操作选项的类。 386e41f4b71Sopenharmony_ci 387e41f4b71Sopenharmony_ci**原子化服务API**:从API version 12 开始,该接口支持在原子化服务中使用。 388e41f4b71Sopenharmony_ci 389e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 390e41f4b71Sopenharmony_ci 391e41f4b71Sopenharmony_ci#### constructor 392e41f4b71Sopenharmony_ci 393e41f4b71Sopenharmony_ciconstructor() 394e41f4b71Sopenharmony_ci 395e41f4b71Sopenharmony_ci默认构造函数。创建一个所有属性均具有默认值的异步锁配置项实例。 396e41f4b71Sopenharmony_ci 397e41f4b71Sopenharmony_ci**原子化服务API**:从API version 12 开始,该接口支持在原子化服务中使用。 398e41f4b71Sopenharmony_ci 399e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 400e41f4b71Sopenharmony_ci 401e41f4b71Sopenharmony_ci**返回值:** 402e41f4b71Sopenharmony_ci 403e41f4b71Sopenharmony_ci| 类型 | 说明 | 404e41f4b71Sopenharmony_ci| ------------------------------------- | ---------------------- | 405e41f4b71Sopenharmony_ci| [AsyncLockOptions](#asynclockoptions) | 新的异步锁配置项实例。 | 406e41f4b71Sopenharmony_ci 407e41f4b71Sopenharmony_ci**示例:** 408e41f4b71Sopenharmony_ci 409e41f4b71Sopenharmony_ci```ts 410e41f4b71Sopenharmony_cilet s: ArkTSUtils.locks.AbortSignal<string> = { aborted: false, reason: 'Aborted' }; 411e41f4b71Sopenharmony_cilet options = new ArkTSUtils.locks.AsyncLockOptions<string>(); 412e41f4b71Sopenharmony_cioptions.isAvailable = false; 413e41f4b71Sopenharmony_cioptions.signal = s; 414e41f4b71Sopenharmony_ci``` 415e41f4b71Sopenharmony_ci 416e41f4b71Sopenharmony_ci#### 属性 417e41f4b71Sopenharmony_ci 418e41f4b71Sopenharmony_ci| 名称 | 类型 | 可读 | 可写 | 说明 | 419e41f4b71Sopenharmony_ci| ----------- | ------------------------------------- | ---- | ---- | ------------------------------------------------------------------------------------------------------------------------- | 420e41f4b71Sopenharmony_ci| isAvailable | boolean | 是 | 是 | 当前锁是否可用。取值为true,则只有在尚未持有锁定请求时才会授予该锁定请求;为false则表示将等待当前锁被释放。默认为 false。 | 421e41f4b71Sopenharmony_ci| signal | [AbortSignal\<T>](#abortsignal)\|null | 是 | 是 | 用于中止异步操作的对象。如果signal.aborted为true,则锁请求将被丢弃;为null则请求正常排队运行。默认为 null。 | 422e41f4b71Sopenharmony_ci| timeout | number | 是 | 是 | 锁操作的超时时间(毫秒)。如果该值大于零,且运行超过该时间,[lockAsync](#lockasync)将返回被拒绝的Promise。默认为 0。 | 423e41f4b71Sopenharmony_ci 424e41f4b71Sopenharmony_ci### AsyncLockState 425e41f4b71Sopenharmony_ci 426e41f4b71Sopenharmony_ci用于存储特定异步锁实例上当前执行的所有锁操作的信息的类。 427e41f4b71Sopenharmony_ci 428e41f4b71Sopenharmony_ci**原子化服务API**:从API version 12 开始,该接口支持在原子化服务中使用。 429e41f4b71Sopenharmony_ci 430e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 431e41f4b71Sopenharmony_ci 432e41f4b71Sopenharmony_ci#### 属性 433e41f4b71Sopenharmony_ci 434e41f4b71Sopenharmony_ci| 名称 | 类型 | 可读 | 可写 | 说明 | 435e41f4b71Sopenharmony_ci| ------- | --------------------------------- | ---- | ---- | ---------------- | 436e41f4b71Sopenharmony_ci| held | [AsyncLockInfo[]](#asynclockinfo) | 是 | 是 | 持有的锁信息。 | 437e41f4b71Sopenharmony_ci| pending | [AsyncLockInfo[]](#asynclockinfo) | 是 | 是 | 等待中的锁信息。 | 438e41f4b71Sopenharmony_ci 439e41f4b71Sopenharmony_ci### AsyncLockInfo 440e41f4b71Sopenharmony_ci 441e41f4b71Sopenharmony_ci关于锁的信息。 442e41f4b71Sopenharmony_ci 443e41f4b71Sopenharmony_ci**原子化服务API**:从API version 12 开始,该接口支持在原子化服务中使用。 444e41f4b71Sopenharmony_ci 445e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 446e41f4b71Sopenharmony_ci 447e41f4b71Sopenharmony_ci#### 属性 448e41f4b71Sopenharmony_ci 449e41f4b71Sopenharmony_ci| 名称 | 类型 | 可读 | 可写 | 说明 | 450e41f4b71Sopenharmony_ci| --------- | ------------------------------- | ---- | ---- | --------------------------------------------------------- | 451e41f4b71Sopenharmony_ci| name | string | 是 | 是 | 锁的名称。 | 452e41f4b71Sopenharmony_ci| mode | [AsyncLockMode](#asynclockmode) | 是 | 是 | 锁的模式。 | 453e41f4b71Sopenharmony_ci| contextId | number | 是 | 是 | [AsyncLockMode](#asynclockmode)调用者的执行上下文标识符。 | 454e41f4b71Sopenharmony_ci 455e41f4b71Sopenharmony_ci### AbortSignal 456e41f4b71Sopenharmony_ci 457e41f4b71Sopenharmony_ci用于中止异步操作的对象。该类的实例必须在其创建的同一线程中访问。从其他线程访问此类的字段会导致未定义的行为。 458e41f4b71Sopenharmony_ci 459e41f4b71Sopenharmony_ci**原子化服务API**:从API version 12 开始,该接口支持在原子化服务中使用。 460e41f4b71Sopenharmony_ci 461e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 462e41f4b71Sopenharmony_ci 463e41f4b71Sopenharmony_ci#### 属性 464e41f4b71Sopenharmony_ci 465e41f4b71Sopenharmony_ci| 名称 | 类型 | 可读 | 可写 | 说明 | 466e41f4b71Sopenharmony_ci| ------- | ------- | ---- | ---- | ---------------------------------------------------------------- | 467e41f4b71Sopenharmony_ci| aborted | boolean | 是 | 是 | 设置为true以中止操作。 | 468e41f4b71Sopenharmony_ci| reason | \<T> | 是 | 是 | 中止的原因。此值将用于拒绝[lockAsync](#lockasync)返回的Promise。 | 469e41f4b71Sopenharmony_ci 470e41f4b71Sopenharmony_ci## ArkTSUtils.ASON 471e41f4b71Sopenharmony_ci 472e41f4b71Sopenharmony_ci为支持将JSON字符串解析成共享数据,即[Sendable支持的数据类型](../../arkts-utils/sendable-overview.md#sendable支持的数据类型),ArkTS语言基础库新增了ASON工具。ASON支持开发者解析JSON字符串,并生成共享数据进行跨并发域传输,同时ASON也支持将共享数据转换成JSON字符串。 473e41f4b71Sopenharmony_ci 474e41f4b71Sopenharmony_ci### ISendable 475e41f4b71Sopenharmony_ci 476e41f4b71Sopenharmony_citype ISendable = lang.ISendable 477e41f4b71Sopenharmony_ci 478e41f4b71Sopenharmony_ciISendable是所有Sendable类型(除`null`和`undefined`)的父类型。自身没有任何必须的方法和属性。 479e41f4b71Sopenharmony_ci 480e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 481e41f4b71Sopenharmony_ci 482e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 483e41f4b71Sopenharmony_ci 484e41f4b71Sopenharmony_ci| 类型 | 说明 | 485e41f4b71Sopenharmony_ci| ------ | ------ | 486e41f4b71Sopenharmony_ci| [lang.ISendable](js-apis-arkts-lang.md#langisendable) | 所有Sendable类型的父类型。 | 487e41f4b71Sopenharmony_ci 488e41f4b71Sopenharmony_ci### Transformer 489e41f4b71Sopenharmony_ci 490e41f4b71Sopenharmony_citype Transformer = (this: ISendable, key: string, value: ISendable | undefined | null) => ISendable | undefined | null 491e41f4b71Sopenharmony_ci 492e41f4b71Sopenharmony_ci用于转换结果函数的类型。 493e41f4b71Sopenharmony_ci 494e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 495e41f4b71Sopenharmony_ci 496e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 497e41f4b71Sopenharmony_ci 498e41f4b71Sopenharmony_ci**参数:** 499e41f4b71Sopenharmony_ci 500e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 501e41f4b71Sopenharmony_ci| ------ | ------ | ---- | --------------- | 502e41f4b71Sopenharmony_ci| this | [ISendable](#isendable) | 是 | 在解析的键值对所属的对象。| 503e41f4b71Sopenharmony_ci| key | string | 是 | 属性名。| 504e41f4b71Sopenharmony_ci| value | [ISendable](#isendable) | 是 | 在解析的键值对的值。| 505e41f4b71Sopenharmony_ci 506e41f4b71Sopenharmony_ci**返回值:** 507e41f4b71Sopenharmony_ci 508e41f4b71Sopenharmony_ci| 类型 | 说明 | 509e41f4b71Sopenharmony_ci| -------- | -------- | 510e41f4b71Sopenharmony_ci| [ISendable](#isendable) \| undefined \| null | 返回转换结果后的ISendable对象或undefined或null。| 511e41f4b71Sopenharmony_ci 512e41f4b71Sopenharmony_ci### BigIntMode 513e41f4b71Sopenharmony_ci 514e41f4b71Sopenharmony_ci定义处理BigInt的模式。 515e41f4b71Sopenharmony_ci 516e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 517e41f4b71Sopenharmony_ci 518e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 519e41f4b71Sopenharmony_ci 520e41f4b71Sopenharmony_ci| 名称 | 值| 说明 | 521e41f4b71Sopenharmony_ci| ------ | ------ | --------------- | 522e41f4b71Sopenharmony_ci| DEFAULT | 0 |不支持BigInt。| 523e41f4b71Sopenharmony_ci| PARSE_AS_BIGINT | 1 |当整数小于-(2^53-1)或大于(2^53-1)时,解析为BigInt。| 524e41f4b71Sopenharmony_ci| ALWAYS_PARSE_AS_BIGINT | 2 |所有整数都解析为BigInt。| 525e41f4b71Sopenharmony_ci 526e41f4b71Sopenharmony_ci### ParseReturnType 527e41f4b71Sopenharmony_ci 528e41f4b71Sopenharmony_ci定义解析结果的返回类型。 529e41f4b71Sopenharmony_ci 530e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 531e41f4b71Sopenharmony_ci 532e41f4b71Sopenharmony_ci| 名称 | 值| 说明 | 533e41f4b71Sopenharmony_ci| ------ | ------ | --------------- | 534e41f4b71Sopenharmony_ci| OBJECT | 0 |返回 SendableObject 对象。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。| 535e41f4b71Sopenharmony_ci| MAP<sup>13+</sup> | 1 |返回 SendableMap 对象。<br>**原子化服务API:** 从API version 13开始,该接口支持在原子化服务中使用。| 536e41f4b71Sopenharmony_ci 537e41f4b71Sopenharmony_ci### ParseOptions 538e41f4b71Sopenharmony_ci 539e41f4b71Sopenharmony_ci解析的选项,可定义处理BigInt的模式与解析结果的返回类型。 540e41f4b71Sopenharmony_ci 541e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 542e41f4b71Sopenharmony_ci 543e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 544e41f4b71Sopenharmony_ci 545e41f4b71Sopenharmony_ci| 名称 | 类型| 必填 | 说明 | 546e41f4b71Sopenharmony_ci| ------ | ------ | ---- | --------------- | 547e41f4b71Sopenharmony_ci| bigIntMode | [BigIntMode](#bigintmode) | 是 |定义处理BigInt的模式。| 548e41f4b71Sopenharmony_ci| parseReturnType | [ParseReturnType](#parsereturntype) | 是 |定义解析结果的返回类型。| 549e41f4b71Sopenharmony_ci 550e41f4b71Sopenharmony_ci### parse 551e41f4b71Sopenharmony_ci 552e41f4b71Sopenharmony_ciparse(text: string, reviver?: Transformer, options?: ParseOptions): ISendable | null 553e41f4b71Sopenharmony_ci 554e41f4b71Sopenharmony_ci用于解析JSON字符串生成ISendable数据或null。 555e41f4b71Sopenharmony_ci 556e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 557e41f4b71Sopenharmony_ci 558e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 559e41f4b71Sopenharmony_ci 560e41f4b71Sopenharmony_ci**参数:** 561e41f4b71Sopenharmony_ci 562e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 563e41f4b71Sopenharmony_ci| ------ | ------ | ---- | --------------- | 564e41f4b71Sopenharmony_ci| text | string | 是 | 有效的JSON字符串。| 565e41f4b71Sopenharmony_ci| reviver | [Transformer](#transformer) | 否 | 转换函数,传入该参数,可以用来修改解析生成的原始值。默认值是undefined。目前只支持传入undefined。| 566e41f4b71Sopenharmony_ci| options | [ParseOptions](#parseoptions) | 否 | 解析的配置,传入该参数,可以用来控制解析生成的结果类型。默认值是undefined。| 567e41f4b71Sopenharmony_ci 568e41f4b71Sopenharmony_ci**返回值:** 569e41f4b71Sopenharmony_ci 570e41f4b71Sopenharmony_ci| 类型 | 说明 | 571e41f4b71Sopenharmony_ci| -------- | -------- | 572e41f4b71Sopenharmony_ci| [ISendable](#isendable) \| null | 返回ISendable数据或null。当入参是null时,返回null。| 573e41f4b71Sopenharmony_ci 574e41f4b71Sopenharmony_ci**示例:** 575e41f4b71Sopenharmony_ci 576e41f4b71Sopenharmony_ci```ts 577e41f4b71Sopenharmony_ciimport { lang } from '@kit.ArkTS'; 578e41f4b71Sopenharmony_ci 579e41f4b71Sopenharmony_citype ISendable = lang.ISendable; 580e41f4b71Sopenharmony_cilet jsonText = '{"name": "John", "age": 30, "city": "ChongQing"}'; 581e41f4b71Sopenharmony_cilet obj = ArkTSUtils.ASON.parse(jsonText) as ISendable; 582e41f4b71Sopenharmony_ciconsole.info((obj as object)?.["name"]); 583e41f4b71Sopenharmony_ci// 期望输出: 'John' 584e41f4b71Sopenharmony_ciconsole.info((obj as object)?.["age"]); 585e41f4b71Sopenharmony_ci// 期望输出: 30 586e41f4b71Sopenharmony_ciconsole.info((obj as object)?.["city"]); 587e41f4b71Sopenharmony_ci// 期望输出: 'ChongQing' 588e41f4b71Sopenharmony_ci 589e41f4b71Sopenharmony_cilet options: ArkTSUtils.ASON.ParseOptions = { 590e41f4b71Sopenharmony_ci bigIntMode: ArkTSUtils.ASON.BigIntMode.PARSE_AS_BIGINT, 591e41f4b71Sopenharmony_ci parseReturnType: ArkTSUtils.ASON.ParseReturnType.OBJECT, 592e41f4b71Sopenharmony_ci} 593e41f4b71Sopenharmony_cilet numberText = '{"largeNumber":112233445566778899}'; 594e41f4b71Sopenharmony_cilet numberObj = ArkTSUtils.ASON.parse(numberText,undefined,options) as ISendable; 595e41f4b71Sopenharmony_ci 596e41f4b71Sopenharmony_ciconsole.info((numberObj as object)?.["largeNumber"]); 597e41f4b71Sopenharmony_ci// 期望输出: 112233445566778899 598e41f4b71Sopenharmony_ci 599e41f4b71Sopenharmony_cilet options2: ArkTSUtils.ASON.ParseOptions = { 600e41f4b71Sopenharmony_ci bigIntMode: ArkTSUtils.ASON.BigIntMode.PARSE_AS_BIGINT, 601e41f4b71Sopenharmony_ci parseReturnType: ArkTSUtils.ASON.ParseReturnType.MAP, 602e41f4b71Sopenharmony_ci } 603e41f4b71Sopenharmony_cilet mapText = '{"largeNumber":112233445566778899}'; 604e41f4b71Sopenharmony_cilet map = ArkTSUtils.ASON.parse(mapText,undefined,options2); 605e41f4b71Sopenharmony_ciconsole.info("map is " + map); 606e41f4b71Sopenharmony_ci// 期望输出: map is [object SendableMap] 607e41f4b71Sopenharmony_ciconsole.info("largeNumber is " + (map as collections.Map<string,bigint>).get("largeNumber")); 608e41f4b71Sopenharmony_ci// 期望输出: largeNumber is 112233445566778899 609e41f4b71Sopenharmony_ci``` 610e41f4b71Sopenharmony_ci 611e41f4b71Sopenharmony_ci### stringify 612e41f4b71Sopenharmony_ci 613e41f4b71Sopenharmony_cistringify(value: ISendable | null | undefined): string 614e41f4b71Sopenharmony_ci 615e41f4b71Sopenharmony_ci该方法将ISendable数据转换为JSON字符串。 616e41f4b71Sopenharmony_ci 617e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 618e41f4b71Sopenharmony_ci 619e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 620e41f4b71Sopenharmony_ci 621e41f4b71Sopenharmony_ci**参数:** 622e41f4b71Sopenharmony_ci 623e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 624e41f4b71Sopenharmony_ci| -------- | -------- | -------- | -------- | 625e41f4b71Sopenharmony_ci| value | [ISendable](#isendable) \| null \| undefined | 是 | ISendable数据。| 626e41f4b71Sopenharmony_ci 627e41f4b71Sopenharmony_ci**返回值:** 628e41f4b71Sopenharmony_ci 629e41f4b71Sopenharmony_ci| 类型 | 说明 | 630e41f4b71Sopenharmony_ci| -------- | -------- | 631e41f4b71Sopenharmony_ci| string | 转换后的JSON字符串。| 632e41f4b71Sopenharmony_ci 633e41f4b71Sopenharmony_ci**示例:** 634e41f4b71Sopenharmony_ci 635e41f4b71Sopenharmony_ci```ts 636e41f4b71Sopenharmony_ciimport { collections } from '@kit.ArkTS'; 637e41f4b71Sopenharmony_ci 638e41f4b71Sopenharmony_cilet arr = new collections.Array(1, 2, 3); 639e41f4b71Sopenharmony_cilet str = ArkTSUtils.ASON.stringify(arr); 640e41f4b71Sopenharmony_ciconsole.info(str); 641e41f4b71Sopenharmony_ci// 期望输出: '[1,2,3]' 642e41f4b71Sopenharmony_ci``` 643e41f4b71Sopenharmony_ci 644e41f4b71Sopenharmony_ci### isSendable 645e41f4b71Sopenharmony_ci 646e41f4b71Sopenharmony_ciisSendable(value: Object | null | undefined): boolean 647e41f4b71Sopenharmony_ci 648e41f4b71Sopenharmony_ci该方法用于判断value是否为Sendable数据类型。 649e41f4b71Sopenharmony_ci 650e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 651e41f4b71Sopenharmony_ci 652e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 653e41f4b71Sopenharmony_ci 654e41f4b71Sopenharmony_ci**参数:** 655e41f4b71Sopenharmony_ci 656e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 657e41f4b71Sopenharmony_ci| -------- | -------- | -------- | -------- | 658e41f4b71Sopenharmony_ci| value | Object \| null \| undefined | 是 | 待校验的对象。| 659e41f4b71Sopenharmony_ci 660e41f4b71Sopenharmony_ci**返回值:** 661e41f4b71Sopenharmony_ci 662e41f4b71Sopenharmony_ci| 类型 | 说明 | 663e41f4b71Sopenharmony_ci| -------- | -------- | 664e41f4b71Sopenharmony_ci| boolean | value是否为Sendable数据类型,true表示value是Sendable数据类型,否则为false。| 665e41f4b71Sopenharmony_ci 666e41f4b71Sopenharmony_ci**示例:** 667e41f4b71Sopenharmony_ci 668e41f4b71Sopenharmony_ci```ts 669e41f4b71Sopenharmony_ciimport { ArkTSUtils } from '@kit.ArkTS' 670e41f4b71Sopenharmony_ci 671e41f4b71Sopenharmony_ci@Sendable 672e41f4b71Sopenharmony_cifunction sendableFunc() 673e41f4b71Sopenharmony_ci{ 674e41f4b71Sopenharmony_ci console.info("sendableFunc") 675e41f4b71Sopenharmony_ci} 676e41f4b71Sopenharmony_ci 677e41f4b71Sopenharmony_ciif (ArkTSUtils.isSendable(sendableFunc)) { 678e41f4b71Sopenharmony_ci console.info("sendableFunc is Sendable"); 679e41f4b71Sopenharmony_ci} else { 680e41f4b71Sopenharmony_ci console.info("sendableFunc is not Sendable"); 681e41f4b71Sopenharmony_ci} 682e41f4b71Sopenharmony_ci// 期望输出: 'SendableFunc is Sendable' 683e41f4b71Sopenharmony_ci``` 684