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