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